本文总共1065个字,阅读需4分钟,全文加载时间:2.405s,本站办公入门专栏收录该内容! 字体大小:

文章导读:之前我们分享过数据压缩的思路,今天我们就说说展开问题!都比较简单,是否新手! 需求:把数据展开,并从小到大排序! “-”表示数据数据区间,比如20-30,表示20到30 这11个数字! 目录内……各位看官请向下阅读:

之前我们分享过数据压缩的思路,今天我们就说说展开问题!都比较简单,是否新手!

需求:把数据展开,并从小到大排序!

“-”表示数据数据区间,比如20-30,表示20到30 这11个数字!


第一步:按照逗号分割

在Excel工作表函数中没有文本分割函数,处理文本类问题非常的痛苦,M函数中有Text.Split等函数,可以轻松按照指定字符分割!

语法:Text.Split(文本,分隔符)

结果:返回按照指定分隔符分割后的列表

下一步,我们就来遍历处理列表,把短划线替换成“..”列表的语法糖!

第二步:遍历列表,转成对应的列表

List.Transform(a,each "{" & Text.Replace(_,"-","..") & "}")

作用是转成列表格式!

想要真正变成列表,需要使用 Expression.Evaluate 来点睛

Expression.Evaluate 和VBA中的Evaluate 的有点类似,可以把文本表达式转成可以计算的表达式!比如案例中,我们只是构建出了List的表示方式

但是无法计算, Expression.Evaluate 处理后则可以计算,比如列表的展开等等!

关于列表的语法糖,

可以看前面写过的文章:PQ实战 | Power Query中如何构建日期列表

第三步:合并列表并排序

List.Combine(b)

List.Combine 把多个列表合并成一个,下一步排序即可!

List.Combine更加基础的案例

排序,直接使用List.Sort,默认就是升序,所以不用加第二参数!

如果是降序,第二参数使用 Order.Descending

List.Sort(c)

排序好,我们需要合并到一个单元格中!

第四步:合并到一个单元格

Text.Combine(List.Transform(d,Text.From),",")

合并直接可以使用Text.Combine即可,但是这样都是数字,Text.Combine要求是文本,所以我们要使用Text.From把数字转成文本,再合并!

肯定有新手会问,关于List.Transform 第二参数在这里的用法问题,直接写了一个函数名称,一般都是each 函数 参数!为什么,申请情况下可以这么写?

首先参数必须是function,也就是函数,其实上下文正好对应这个函数的参数!比如我们上面一般写成 each Text.From(_),此时遍历的元素正好是Text.From的唯一参数,没有歧义!

List.Transform官方案例:

想要从零系统学习Excel,查看本站上方“视频教程”获取最新秋叶Office三合一办公应用课程!

以上内容由优质教程资源合作伙伴 “鲸鱼办公” 整理编辑,如果对您有帮助欢迎转发分享!

你可能对这些文章感兴趣:

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注