ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3301|回复: 12

[求助] 连续2个以上的数字号码,只取首尾两个号码、中间用“-”连接,其他的用“、”连接

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-1-21 13:42 | 显示全部楼层 |阅读模式
困扰我很久的问题了,求高手指点一下。要是能解决部分问题,也一样感激不尽。
连续3个或3个以上的数字号码,只取首尾两个号码、中间用“-”连接,其他的用“、”连接

123456.png

excel求问.rar

6.01 KB, 下载次数: 30

TA的精华主题

TA的得分主题

发表于 2019-1-21 15:24 | 显示全部楼层
excel2016powerquery所做

excel求问2.rar

14.07 KB, 下载次数: 21

TA的精华主题

TA的得分主题

发表于 2019-1-21 15:29 | 显示全部楼层
zyhqzn 发表于 2019-1-21 15:24
excel2016powerquery所做

老师把代码写出来吧,我正在学习PQ中,学个思路

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-21 15:39 | 显示全部楼层
zyhqzn 发表于 2019-1-21 15:24
excel2016powerquery所做

多谢大佬,我回去下个2016看看,现在的是2013的,打开没公式

TA的精华主题

TA的得分主题

发表于 2019-1-21 15:50 | 显示全部楼层
我走我流 发表于 2019-1-21 15:29
老师把代码写出来吧,我正在学习PQ中,学个思路
  1. 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
  2.     更改的类型 = Table.TransformColumnTypes(源,{{"部门", type text}, {"发票号码", Int64.Type}}),
  3.     排序的行 = Table.Sort(更改的类型,{{"发票号码", Order.Ascending}}),
  4.     分组的行 = Table.Group(排序的行, {"部门"}, {{"计数", each if List.Count(_[发票号码])>=3 then Text.From(List.Min(_[发票号码]))&"-"&Text.From(List.Max(_[发票号码])) else if List.Count(_[发票号码])=2 then Text.From(List.Min(_[发票号码]))&"、"&Text.From(List.Max(_[发票号码])) else Text.From(_[发票号码]{0})  }},0),
  5.     分组的行1 = Table.Group(分组的行, {"部门"}, {{"发票号码", each Text.Combine([计数],"、")}})
复制代码

TA的精华主题

TA的得分主题

发表于 2019-1-21 15:51 | 显示全部楼层
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    更改的类型 = Table.TransformColumnTypes(源,{{"部门", type text}, {"发票号码", Int64.Type}}),
    排序的行 = Table.Sort(更改的类型,{{"发票号码", Order.Ascending}}),
    分组的行 = Table.Group(排序的行, {"部门"}, {{"计数", each if List.Count(_[发票号码])>=3 then Text.From(List.Min(_[发票号码]))&"-"&Text.From(List.Max(_[发票号码])) else if List.Count(_[发票号码])=2 then Text.From(List.Min(_[发票号码]))&"、"&Text.From(List.Max(_[发票号码])) else Text.From(_[发票号码]{0})  }},0),
    分组的行1 = Table.Group(分组的行, {"部门"}, {{"发票号码", each Text.Combine([计数],"、")}})

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-1-21 15:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-1-21 17:44 | 显示全部楼层
提供一个笨办法,但低版本如Excel2003也可以用:

加一个辅助列,再加两个很常用的自定义函数:1、正则替换函数:RegReplace,2、文本联结函数TextJoin。

其中,TextJoin与Office365中内置的同名函数功能完全一致!

excel求问.rar (14.7 KB, 下载次数: 23)

TA的精华主题

TA的得分主题

发表于 2019-1-21 18:41 | 显示全部楼层
筛选出需要的发票号,即使去掉连续号码中间号也能做到,但是最后要合并就需要新函数了

TA的精华主题

TA的得分主题

发表于 2019-1-21 19:05 | 显示全部楼层
  1. =IF((A3:A11=E3)*((A2:A10<>E3)+(A4:A12<>E3)),B3:B11*(1-2*(A2:A10=E3)*(A1:A9=E3)),"")
复制代码
模拟数据太简陋了,因为涉及合并数据在一个单元格,如果数据量大不如去代码求助。这个公式只是就模拟数据而言得到需要合并的值,还需要textjoin用顿号合并,再套一个substitute吧 "、-" 替换为"-",没新函数就不继续写了,主要是这个公式估计对真实数据不一定正确 CC.gif

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-23 18:33 , Processed in 0.038286 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表