如何批量实现当A列存在重复项时合并对应B列数据?
批量合并重复索引对应的B列数据方案
方案1:动态数组公式(Excel 365/2021及以上版本)
直接在空白单元格输入以下公式,回车后会自动溢出所有结果,无需手动拖拽:
=LET(uniqueA,UNIQUE(A:A),HSTACK(uniqueA,BYROW(uniqueA,LAMBDA(x,TEXTJOIN(", ",TRUE,FILTER(B:B,A:A=x))))))
- 逻辑说明:先用
UNIQUE(A:A)提取A列所有不重复的索引值,再通过BYROW遍历每个不重复索引,用FILTER筛选出对应B列的所有数据,最后用TEXTJOIN合并成单个单元格,HSTACK把索引列和合并后的B列拼接在一起。
方案2:Power Query(全Excel版本通用,无需公式)
适合不想写公式的场景,步骤如下:
- 选中包含A、B列的整个数据区域(要包含表头)
- 点击顶部菜单栏「数据」→「从表格/范围」,弹出对话框时勾选「我的表格有标题」
- 在Power Query编辑器中,选中A列,点击「转换」→「分组依据」
- 分组列选择A列,新列名填「合并B列」,操作选择「所有行」,点击确定
- 添加自定义列,输入公式:
=TEXTJOIN(", ",TRUE,[所有行][B]) - 删除自动生成的「所有行」列,点击「关闭并上载」,新工作表会自动生成合并好的结果。
方案3:VBA宏(适合频繁重复使用的场景)
如果需要反复处理这类数据,可以用宏一键完成:
- 按
Alt+F11打开VBA编辑器 - 右键点击左侧工作表名称,选择「插入」→「模块」
- 粘贴以下代码:
Sub MergeDuplicateB() Dim ws As Worksheet Dim lastRow As Long Dim dict As Object Dim i As Long Set ws = ActiveSheet lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Set dict = CreateObject("Scripting.Dictionary") ' 遍历收集每个索引对应的B列数据 For i = 2 To lastRow ' 假设第1行是表头,若没有表头则改为i=1 If Not dict.Exists(ws.Cells(i, "A").Value) Then dict(ws.Cells(i, "A").Value) = ws.Cells(i, "B").Value Else dict(ws.Cells(i, "A").Value) = dict(ws.Cells(i, "A").Value) & ", " & ws.Cells(i, "B").Value End If Next i ' 清空原数据(保留表头)并写入合并结果 ws.Range("A2:B" & lastRow).ClearContents i = 2 For Each key In dict.Keys ws.Cells(i, "A").Value = key ws.Cells(i, "B").Value = dict(key) i = i + 1 Next key End Sub
- 回到Excel界面,按
F5运行宏即可(运行前建议先备份数据)。
内容的提问来源于stack exchange,提问作者classy_BLINK
相关产品推荐
相关产品推荐

