Excel中使用数据透视表转换词汇表的方法及替代方案咨询
Excel中使用数据透视表转换词汇表的方法及替代方案咨询
嘿,刚接触Excel不用慌~你说的这个需求我太熟啦,咱们一步步来捋清楚怎么搞定它!
首先得说:直接用普通数据透视表没法直接实现你要的“把同一词汇的页码合并成逗号分隔”的效果,不过咱们可以先把数据整理成合适的格式,再用简单的公式或者调整后的透视表来实现。
第一步:先把你的“零散数据”规整成标准格式
你的原始数据里,词汇分散在第二、第三列,还有空值,首先得把它们转成「一个词汇对应一个页码」的结构:
- 先给你的表格补全列名,比如第一列叫
Page,第二列Word1,第三列Word2 - 点击「数据」选项卡 → 「从表格/区域」,把数据导入Power Query编辑器(这是Excel自带的强大工具,新手也能快速上手)
- 在编辑器里,选中
Page列,然后点「转换」选项卡 → 「逆透视其他列」,这时候所有非空的词汇都会被放到一列里,自动去掉空值,得到一个干净的列表:每一行就是「页码+对应词汇」 - 最后点击「关闭并上载」,把整理好的数据导出到Excel工作表里
第二步:汇总词汇对应的所有页码
这时候有两种简单方法,推荐第一种对新手更友好:
方法1:用TEXTJOIN+UNIQUE函数(Excel 2019及以后版本可用)
- 先提取所有不重复的词汇:在新工作表的A2单元格输入
=UNIQUE(整理后的数据表[值]),回车后就会自动列出所有唯一词汇 - 然后在B2单元格输入
=TEXTJOIN(",", TRUE, FILTER(整理后的数据表[Page], 整理后的数据表[值]=A2)),下拉填充,就能得到每个词汇对应的所有页码,自动用逗号分隔啦
方法2:数据透视表(需要自定义聚合,适合想深入学习的情况)
普通数据透视表的聚合函数都是求和、计数这类,没法合并文本,所以得先自定义一个聚合函数:
- 按
Alt+F11打开VBA编辑器,插入一个新模块,粘贴下面的代码:
Function ConcatenateIfs(rng As Range, criteriaRange As Range, criteria As Variant, Optional delimiter As String = ",") As String Dim cell As Range Dim result As String result = "" For Each cell In rng If criteriaRange(cell.Row - rng.Row + 1) = criteria Then If result <> "" Then result = result & delimiter result = result & cell.Value End If Next cell ConcatenateIfs = result End Function
- 回到Excel,插入数据透视表,把「值」(词汇)拖到行区域,「Page」拖到值区域
- 点击值区域的「Page」字段,选择「值字段设置」→「自定义」,选择刚创建的
ConcatenateIfs函数,就能得到合并后的页码啦
总结
如果是新手,强烈推荐逆透视+TEXTJOIN函数的组合,不需要复杂操作,几步就能搞定;如果想探索数据透视表的进阶用法,自定义聚合函数也是个不错的学习方向。
备注:内容来源于stack exchange,提问作者Ankit Patel




