博文

目前显示的是 2019的博文

使用power query 实现excel单元格内多个数字提取求和

      昨天在网上看到有人提问,说想实现EXCEL某单元格中不规律数字提取并求和。由于本人正在学习power query,所以第一反应就是用pq来解决。当然,网上也不乏使用excel函数解决的教程,但是多数针对的是一个单元格中只有一个数字的情况。如下图这样的情况,就比较困难了。 图1 不带分隔符的表      因为这涉及到几个数字的提取,并且在提取时要保证数字的完整。也就是说,3就是3,31就是31,不能识别为3和1 ,否则求和结果就是错误的。事实上,有不少power query教程都有这样的示例。但我查询一下,基本上都是针对带有明显分隔符的数据来操作的(如下图)。先按分隔符,将每一个包括数字的部分拆分到一个列表中,然后 再使用替换字符的方法,留下数字,再求和。由于有固定的分隔符,拆分成列表就比较容易。对于没有明显规律的分隔符的,就比较麻烦一点了。大部分教程中都没有提到这种状况的解决方法。经过摸索,基本上成功的解决这个麻烦。 图2 带分隔符的表 大体思路如下: 由于数字都是跟在文本后面的,没有明显的分隔符,所以只能考虑使用文本来进行分隔。 如果用汉字集来分隔的话,那么要取的汉字太多,效率会很低。转变思路,先将单元格中文本取出来,然后以此作为依据进行分隔。这样虽然多一步骤,但是要查找替换的文本只有几个字,效率提高的不是一点点。 以提取出来的文本对单元格进行分隔,将数字分离到一个LIST中,再转换为数值型,求和即可。    以下为实现步骤:       1. 提取除数字之外的文本。由于要提取的数值部分包括0-9数字和作为小数点的.。因此先将这部分移除,剩余的即为要用的文本部分。        代码 = Table.AddColumn(源, "自定义", each Text.Remove([列1],{"0".."9","."})) 由于后面要根据提取出来的文本进行替换,以获得数值部分,所以 将0-9及“. ”先替换掉。这个“.”一定要放在里面,否则替换出来的结果会将小数点去掉,使小数变成整数,造成结果错误。 替换后结果如下: 图3...