看了这个例子,一辈子记住这个有趣的函数,以后给内容配对就有思路了

2021-08-31 10:15:05 浏览数 (3)

有朋友在微信公众号的后台发消息提问:怎么同时对两列合并的文本进行逆透视?

看到这个问题,我一时竟无言以对……

后来,在群里看到的数据是这样的:

要求是这样子的:

这不叫逆透视啊!什么是透视?什么是逆透视?看图:

逆透视是多列(列名)都逐个放到行里变明细数据哦,而上面想要的结果列和原始数据的列是一毛一样的,只是要把列里面的内容拆分、配对展开……

数据简化模拟如下:

所以,首先第一步,不管怎么着,先把列给拆分了,但是,这里不好用拆分列的功能来做,为什么?

1、不能拆分到行:因为要分别对两列的内容进行拆分且找配对关系,先拆任何一列都会使配对关系丢失;

2、不能拆分到列:因为要拆分的内容的项数是不固定的。

所以,只好考虑用函数(Text.Split)先分别拆成列表放着,后面再想办法配对到一起。

- 1 - 拆分内容

Step 01:用函数拆分列

同样拆分“序号”列,得到结果如下(现在先讲分步解法,怎么综合各步骤函数一条公式搞定的事情等会儿再讲):

- 2 - 内容配对

都拆分好之后,面临的最关键问题就是怎么把两边的内容给配对好,对于这一点,有个很有意思的函数,而且这个函数本身就是一种处理数据的思路——List.Zip,我把它叫做“拉链”函数

轻松简单就把两个列表里的内容一项项对应好,拉到一起,超级形象!看完这个例子,我希望你对这个函数终生难忘。

这里要注意且比较容易犯错误的是,List.Zip的参数是一个列表,也就是要将多个需要配对的列表放到一个列表一起交给List.Zip,所以好好看看上面例子的里外加的那对红色大括号,好好理解一下。

有了这样的函数,问题就很简单了。

Step 02:添加自定义列,把两列拆分出来的内容直接拉到一起

内容配对好后,就可以层层展开了……

- 3 - 内容展开

Step 03:第一次展开,扩展到新行(因为不同的配对内容是要拆到多个行的)

Step 04:第二次展开,提取值(因为配对好的内容本身是要在同一行里的,分隔符按需要选择即可,后面拆分列时用,这里选择空格)

Step 05:提取出来后,再按前面选择的分隔符简单分列即可

最后,关于怎么综合各步骤函数一条公式搞定的事情,先看个图:

0 人点赞