营长说
在数据清洗和整理中,总会遇到形形色色的要求。今天营长分享的是一对相反的操作,将Excel文本多行变一行,一行变多行。会用到Excel最新的TEXTJOIN、FILTER函数,也会用到Excel强大的后台Power Query编辑器。
1 多行变一行
今天的案例来自上周企业内训的培训部门负责人,想把左侧的每人多行列表变成右侧的每人一行,这样每位员工登记的设备就一目了然。

方法一:FILTER函数(适合365版本)
FILTER函数是Office 365版本新增的动态筛选函数
这里用到转置函数TRANSPOSE和FILTER的组合,结果在不同的单元格中。

在E2单元格中输入公式
=TRANSPOSE(FILTER($B$2:$B$8,$A$2:$A$8=D2))
后面单元格均会自动填充结果,向下拖拽公式即可。
方法二:TEXTJOIN函数(适合2019和365版本)
TEXTJOIN函数可以把多个区域的文本,用特定符号连接起来。
这里用TEXTJOIN和IF函数,根据姓名匹配各自的设备型号,用“、”连接放在一个单元格中。

在E2单元格中输入公式:
=TEXTJOIN("、",,IF($A$2:$A$8=D2,$B$2:$B$8,""))
方法三:用Power Query工具(适合2016及以上版本)
从2016版本开始,Excel自带强大的数据查询工具Power Query,2010和2013版本都需要安装插件。
PQ插件官方下载地址:
https://www.microsoft.com/zh-cn/download/details.aspx?id=39379
如果是Excel 2003/07版本,友情拥抱,很抱歉,朋友,现在是公元2020年了,你是不是应该换个Excel版本了呢?
回到本例,如下图将表格导入到PQ编辑器中,本文用365版本演示。

按姓名进行分组

新列名为”设备“,操作选择”所有行“。

只需要将它自动生成的公式编辑栏里的公式内容稍做下修改即可搞定多行变单行的操作。

each Text.Combine(_[登记设备],",")
Text.Combine()是字符合并函数,根据第二个参数给出的分隔符,将前面的内容进行合并.关于函数的介绍可以参考官方介绍。
https://docs.microsoft.com/zh-cn/powerquery-m/text-combine

最后”关闭并上载“即可。

2 一行变多行
也会遇到一行数据,如何快速按姓名变成多行呢?如下图。

最方便快捷的方法还是用PQ编辑器里的分列到行功能,适合2019和365版本。
先将数据导入。

【拆分列】--【按分隔符】

输入自定义符号”、“,拆分为”行“,这一步很关键。

结果立马呈现,就可以上载到Excel工作簿中。

好,今天的教程就是这些。

