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

求助:Excel合并空单元格上方多单元格内容并去重(无VBA基础)

解决方案:按空行分割的数据集去重合并

针对你需要将空行分隔的数据集去重合并为逗号分隔列表的需求,提供两种可行方案:

方案一:Excel公式法(适用于Excel 365/2021及以上版本)

假设原始数据在A列,结果写入B列,将以下公式复制到第一个空行对应的B列单元格(比如B1),然后下拉到所有空行对应的B列位置即可:

=IFERROR(LET(next_blank, MATCH(TRUE, ISBLANK(A2:A$1000), 0), data_range, A2:INDEX(A:A, ROW(A1)+next_blank-1), TEXTJOIN(", ", TRUE, UNIQUE(data_range))), TEXTJOIN(", ", TRUE, UNIQUE(A2:A$1000)))

公式说明:

  • MATCH(TRUE, ISBLANK(A2:A$1000), 0):定位当前空行下方第一个空行的位置,确定当前数据集的范围
  • UNIQUE(data_range):对数据范围内的值自动去重
  • TEXTJOIN(", ", TRUE, ...):将去重后的值用「逗号+空格」拼接成字符串
  • IFERROR:处理最后一个数据集(下方无空行)的边界情况

方案二:VBA宏(适用于所有Excel版本)

如果你使用旧版Excel,或觉得公式操作繁琐,可按以下步骤用宏完成,无需懂VBA:

  1. 打开目标Excel文件,按下Alt+F11打开VBA编辑器
  2. 右键点击左侧的工作簿名称,选择「插入」→「模块」
  3. 将以下代码粘贴到模块窗口中:
Sub MergeUniqueByBlankRows()
    Dim ws As Worksheet
    Dim lastRow As Long, i As Long, startRow As Long, endRow As Long
    Dim uniqueVals As Collection
    Dim cellVal As Variant, resultStr As String
    
    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    startRow = 1
    
    Do While startRow <= lastRow
        ' 跳过非空行,定位到数据集的分隔空行
        If ws.Cells(startRow, "A").Value <> "" Then
            startRow = startRow + 1
            GoTo NextLoop
        End If
        
        ' 确定当前数据集的结束行(下一个空行的前一行)
        endRow = startRow + 1
        Do While endRow <= lastRow And ws.Cells(endRow, "A").Value <> ""
            endRow = endRow + 1
        Loop
        endRow = endRow - 1
        
        ' 收集去重值
        Set uniqueVals = New Collection
        On Error Resume Next
        For i = startRow + 1 To endRow
            cellVal = ws.Cells(i, "A").Value
            If cellVal <> "" Then
                uniqueVals.Add cellVal, Key:=CStr(cellVal)
            End If
        Next i
        On Error GoTo 0
        
        ' 拼接结果字符串
        resultStr = ""
        For Each cellVal In uniqueVals
            resultStr = IIf(resultStr = "", cellVal, resultStr & ", " & cellVal)
        Next cellVal
        
        ' 写入结果到B列对应位置
        ws.Cells(startRow, "B").Value = resultStr
        
        ' 跳转到下一个数据集的起始行
        startRow = endRow + 1
NextLoop:
    Loop
End Sub
  1. 按下F5运行宏,或回到Excel界面按Alt+F8,选择MergeUniqueByBlankRows执行即可。

宏说明:

  • 自动识别A列中所有以空行分隔的数据集
  • 对每个数据集内的值自动去重,合并为逗号分隔的字符串
  • 结果自动写入对应空行的B列位置

内容的提问来源于stack exchange,提问作者LWS-Mo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:25:50