【案例】求单元格中的数字之和

此案例来源于雷友会QQ群(198086726)。源文件偷懒不给出了。

需求

单元格中的值由为长度不等的数字组成,要求求出每个单元格的所有数字之和,如下图:

单元格中的数字.png

比如,第一行的结果是6+2+2+5+7+5+7+6+7+6+3+4+2+1+2+7=72,以此类推。

SumUpAllNumbers.png

分析

解决这个问题的思路是怎么把单元格的内容拆分为独立的数字,否则无法求和。
一旦涉及到拆分,我们首先想到的是分列,这就是群里“新云”给出的方法一【按位置分列版】。
不过我这两天在啃Python,里边提到文本操作时,可以用list()函数把单词拆分为由字母组成的list,如list(wanght)=['w','a','n','g','h','t']。我在群里瞄见这个例子后,突发奇想,PowerQuery会不会有类似功能的函数呢?打开函数参考,一个一个找,果然被我找到了Text.ToList()这个函数,它起的作用和Python中的list()一模一样。所以这就是方法二【Text2List版】。

按位置分列求和

let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
复制的列 = Table.DuplicateColumn(源, "数字", "numbers"),
用位置分列 = Table.SplitColumn(复制的列,"numbers",Splitter.SplitTextByRepeatedLengths(1),{"数字 - 复制.1", "数字 - 复制.2", "数字 - 复制.3", "数字 - 复制.4", "数字 - 复制.5", "数字 - 复制.6", "数字 - 复制.7", "数字 - 复制.8", "数字 - 复制.9", "数字 - 复制.10", "数字 - 复制.11", "数字 - 复制.12", "数字 - 复制.13", "数字 - 复制.14", "数字 - 复制.15", "数字 - 复制.16", "数字 - 复制.17"}),
逆透视的其他列 = Table.UnpivotOtherColumns(用位置分列, {"数字"}, "属性", "值"),
更改的类型 = Table.TransformColumnTypes(逆透视的其他列,{{"值", Currency.Type}}),
分组的行 = Table.Group(更改的类型, {"数字"}, {{"求和", each List.Sum([值]), type number}})
in
分组的行

Text2List之后求和

let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
复制的列 = Table.DuplicateColumn(源, "数字", "numbers"),
文本到List = Table.AddColumn(复制的列, "list", each Text.ToList([numbers])),
ListSum求和 = Table.AddColumn(文本到List, "求和", each List.Sum(List.Transform([list],each Number.From(_)))),
删除的列 = Table.RemoveColumns(ListSum求和,{"numbers", "list"})
in
删除的列

总结与反思

观察两个方法,发现都用了List.Sum()这个函数。所以,这个函数是处理这类求和问题的关键,就是把求和对象拆解为list,然后来求和。而得到一个list的方法是多种多样的。就我个人而言,更喜欢我自己找到的Text2List方法,因为这个只涉及Text.ToList()和List.Sum()这两个函数,而【按位置分列求和】涉及到复杂的分列、逆透视和分组操作。

这个例子还可以有多种变形,比如有些人喜欢把手机号码的各组成数字求和,或者把自己名字的拼音字母求和等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • ​我们首先看到的是1级竞技场,也就是最初级的水平。在这个层级当中的需求呢,通常是一些最基本的统计需求,例如求和、统...
    碧雪丹蓉阅读 3,131评论 2 16
  • Java8 in action 没有共享的可变数据,将方法和函数即代码传递给其他方法的能力就是我们平常所说的函数式...
    铁牛很铁阅读 1,208评论 1 2
  • 首页 资讯 文章 资源 小组 相亲 登录 注册 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他...
    Helen_Cat阅读 3,837评论 1 10
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,719评论 0 33
  • 林徽因和张爱玲相差16岁 都是天赋异禀 都是民国女神 她们的人生,藏着女人幸福的终极密码 01 1904年,林徽因...
    九命山喵阅读 222评论 0 2