分享

我发现这个Excel难题用Power Query做真的很简单!

 昵称38017100 2019-03-23

前两天在群里碰到小伙伴提到这个问题。

这里姓名和工号是一一对应的,但是并不是按照标准的方式存储数据的,现在需要按照组别、姓名、工号分别拆开,也就是变成这种形式的。

这样的数据就是标准的表格形式,方便统计,方便数据匹配。

上面的不标准的数据其实是典型的数据杂糅问题(多个信息杂糅在一个单元格),处理这种问题最常用的就是分列。但是这里需要有2列需要分列,关键的是需要做好对应,直接分列就不太好做了。

普通的方法不太好做,所以我们又请出了数据处理利器——Power Query.

方法1:不用M函数的PQ方法

不会M函数来做的话,步骤稍微有点多,不过方法不难,就是拆分+合并。

第一步、加载数据

将表格数据加载到PQ,然后改名为“姓名”,在查询列表里,将“姓名”这个表复制一份,再改名为“工号”。改名的步骤主要是待会用起来好分清楚,当然也可以省略。

第二步、对“姓名”表中的姓名列拆分

选中“姓名”表,选中姓名列,点击开始-拆分列,选择自定义分割符,输入“、”(这里会自动检测到,如果没有检测到就手动输入),然后点开高级选项,选择拆分为行

这样就把姓名拆开到行了,至于这里的工号,我们不用管,删掉都没有关系。

对这个表添加一个索引。注意这里我是点开索引列,选的是从1开始。

然后对“工号”这个表,按照上面的步骤也来做一遍,注意拆分的是工号这列

第三步、合并查询

选中“姓名”表,点击开始-合并查询,选择“工号”表为合并表,选中两个表的索引列作为依据。

得到下面合并的结果。

点击工号.1,展开Table,这里只需要选择工号就好了。

然后就差不多得到需要的结果了。

删除不要的工号列和索引列,再将数据加载回工作表。

方法二:写个M函数简直太便捷

方法一的操作确实有点多,用到的知识点还真不少,不过如果是直接写个M函数那就太便捷了。

首先 还原一份加载后没做任何修改的数据。

然后添加自定义列,写公式。

公式为:

=Table.FromColumns({Text.Split([姓名],'、'),Text.Split([工号],'、')})

并不太复杂的函数,外层是一个Table.FromColumns函数,表示以列构造表,里面则是分别将姓名列和工号列拆分。

然后再将构造的Table展开就好了。

得到的结果同样也是正确的。

怎么样,是不是M函数更快捷!

那么问题来了,你掌握了哪种方法呢?还有什么 好的方法来做这个题目么?欢迎交流!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多