You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量实现当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宏(适合频繁重复使用的场景)

如果需要反复处理这类数据,可以用宏一键完成:

  1. 按Alt+F11打开VBA编辑器
  2. 右键点击左侧工作表名称,选择「插入」→「模块」
  3. 粘贴以下代码:
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
  1. 回到Excel界面,按F5运行宏即可(运行前建议先备份数据)。

内容的提问来源于stack exchange,提问作者classy_BLINK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 18:40:38