You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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:数据透视表(需要自定义聚合,适合想深入学习的情况)

普通数据透视表的聚合函数都是求和、计数这类,没法合并文本,所以得先自定义一个聚合函数:

  1. 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
  1. 回到Excel,插入数据透视表,把「值」(词汇)拖到行区域,「Page」拖到值区域
  2. 点击值区域的「Page」字段,选择「值字段设置」→「自定义」,选择刚创建的ConcatenateIfs函数,就能得到合并后的页码啦

总结

如果是新手,强烈推荐逆透视+TEXTJOIN函数的组合,不需要复杂操作,几步就能搞定;如果想探索数据透视表的进阶用法,自定义聚合函数也是个不错的学习方向。

备注:内容来源于stack exchange,提问作者Ankit Patel

火山引擎 最新活动