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

Excel基于关键列合并非数值及空数据的解决方案问询

嘿,我经常帮人解决这类Excel数据合并的问题,给你几个靠谱的方案,你可以根据自己的情况选:

方案1:用Power Query实现自动合并(首推,适配多列多类型数据)

Power Query是Excel自带的超强数据处理工具,完美应对这种按多键合并的场景,而且操作步骤可复用:

  • 第一步:导入数据到Power Query。选中包含表头的数据区域,点击「数据」选项卡 → 「从表格/区域」,弹出确认框时勾选“我的表格有标题”。
  • 第二步:设置分组规则。在Power Query编辑器里,点击「转换」选项卡 → 「分组依据」:
    • 按住Ctrl选中学生邮箱、参训日期、课程SKU这三列作为分组依据
    • 新列名设为「合并数据」,操作选择「所有行」
  • 第三步:展开并整合数据。点击「合并数据」列右侧的展开箭头,选择「提取值」,设置合适的分隔符(比如逗号、分号)后确认。
  • 第四步:加载回Excel。点击「主页」选项卡 → 「关闭并上载」,合并好的数据会自动出现在新工作表里。
    注:Power Query会自动识别数值、日期、文本格式,无需额外调整格式兼容问题。
方案2:用数组公式+TEXTJOIN手动合并(适合小体量数据)

如果你的数据行数不多,可以用Excel函数快速实现:
假设「学生邮箱」在A列,「参训日期」在B列,「课程SKU」在C列,要合并的目标列是D列,在空白列(比如E列)输入公式:
=TEXTJOIN(",",TRUE,IF((A$2:A$100=A2)*(B$2:B$100=B2)*(C$2:C$100=C2),D$2:D$100,""))

  • 若你用的是Excel 365/2021版本,直接回车即可;旧版本需要按Ctrl+Shift+Enter触发数组公式。
  • 提示:把公式里的行范围(A$2:A$100)改成你实际的数据范围,其他列合并只需复制公式并调整列号。
方案3:用VBA脚本批量合并(适合重复执行的场景)

如果你需要频繁处理这类数据,可以写个简单的VBA脚本一键完成:
打开Excel按Alt+F11打开VBA编辑器,插入模块后粘贴以下代码:

Sub MergeRowsByKeyColumns()
    Dim ws As Worksheet
    Dim lastRow As Long, i As Long, j As Long
    Dim keyCol1 As Integer, keyCol2 As Integer, keyCol3 As Integer
    Dim mergeCols As Variant
    Dim key1 As String, key2 As String, key3 As String
    
    ' 根据你的实际列号调整以下参数(A=1, B=2, C=3...)
    keyCol1 = 1 ' 学生邮箱列
    keyCol2 = 2 ' 参训日期列
    keyCol3 = 3 ' 课程SKU列
    mergeCols = Array(4, 5, 6, 7, 8, 9, 10) ' 需要合并的其他列号
    
    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, keyCol1).End(xlUp).Row
    
    ' 先按关键列排序,方便后续合并
    ws.Sort.SortFields.Clear
    ws.Sort.SortFields.Add Key:=ws.Cells(1, keyCol1), Order:=xlAscending
    ws.Sort.SortFields.Add Key:=ws.Cells(1, keyCol2), Order:=xlAscending
    ws.Sort.SortFields.Add Key:=ws.Cells(1, keyCol3), Order:=xlAscending
    With ws.Sort
        .SetRange ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, ws.Columns.Count))
        .Header = xlYes
        .Apply
    End With
    
    ' 开始合并重复行
    i = 2
    Do While i <= lastRow
        key1 = ws.Cells(i, keyCol1).Value
        key2 = ws.Cells(i, keyCol2).Value
        key3 = ws.Cells(i, keyCol3).Value
        
        j = i + 1
        Do While j <= lastRow And ws.Cells(j, keyCol1).Value = key1 And ws.Cells(j, keyCol2).Value = key2 And ws.Cells(j, keyCol3).Value = key3
            ' 合并指定列的数据
            For Each col In mergeCols
                If ws.Cells(i, col).Value <> "" Then
                    ws.Cells(i, col).Value = ws.Cells(i, col).Value & ", " & ws.Cells(j, col).Value
                Else
                    ws.Cells(i, col).Value = ws.Cells(j, col).Value
                End If
            Next col
            ' 删除重复行
            ws.Rows(j).Delete
            lastRow = lastRow - 1
        Loop
        i = i + 1
    Loop
End Sub
  • 使用前记得先根据你的表格列号调整代码里的关键列和合并列参数,运行前备份原始数据避免误操作,最后按Alt+F8选择宏运行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:38:32