Excel如何按指定列分组将同组值拼接合并到单个单元格
按列分组拼接同组文本值的实现方案
普通数据透视表默认仅支持数值类聚合计算(求和、计数、平均值等),没有原生文本拼接聚合能力,这是你用透视表没得到预期结果的原因。以下是三种可直接落地的实现方案,适配不同使用场景:
方案1:Excel 365/2021及以上版本 单公式快速实现
直接在空白单元格输入以下公式,会自动溢出返回完整的分组结果表,无需手动下拉填充:
=HSTACK(UNIQUE(A2:A7),BYROW(UNIQUE(A2:A7),LAMBDA(target_state,TEXTJOIN(", ",TRUE,FILTER(B:B,A:A=target_state)))))
公式逻辑:
- 用
UNIQUE(A2:A7)提取State列的所有不重复值,作为结果表的第一列 - 遍历每个不重复的州名,用
FILTER匹配出该州对应的所有城市 - 用
TEXTJOIN将匹配到的城市用逗号加空格拼接为单个文本,自动跳过空值 - 最后用
HSTACK将州名列和拼接后的城市列横向合并为最终结果
方案2:全版本通用 Power Query 实现(推荐大数据量/需定期更新场景)
该方案无Excel版本门槛,后续原始数据更新后只需右键刷新即可同步结果,适合数据量大、需要反复更新的场景:
- 选中原始数据区域,点击顶部「数据」选项卡-「从表格/区域」,将数据加载到Power Query编辑器
- 选中
State列,点击「转换」选项卡-「分组依据」 - 在弹出的设置窗口中按如下规则配置:
- 分组依据字段选择
State - 新聚合列命名为
CityList,聚合操作选择「所有行」
- 分组依据字段选择
- 点击「添加列」-「自定义列」,输入自定义列公式:
Text.Combine([CityList][City], ", ") - 删除中间生成的
CityList临时列,将自定义列重命名为Cities - 点击左上角「关闭并上载」,即可将结果导出到Excel工作表
方案3:Excel 2019及更早版本 辅助列实现
如果使用的是不支持动态数组的旧版Excel,可通过辅助列配合数组公式实现:
- 先提取State列的所有不重复值,粘贴到空白列作为结果表的State列
- 在对应Cities列的首行输入以下公式,输入完成后按
Ctrl+Shift+Enter三键触发数组计算,再下拉填充到所有行即可:
=TEXTJOIN(", ",TRUE,IF($A$2:$A$7=D2,$B$2:$B$7,""))
注意:如果你的Excel版本没有TEXTJOIN函数(2016及更早版本),优先使用方案2的Power Query方法,无需编写VBA代码即可实现。
内容的提问来源于stack exchange,提问作者Lane H
相关产品推荐
相关产品推荐

