Excel按条件合并单元格:求合并相同交易号行的宏代码
按交易号合并行(合并单元格内容)的VBA宏代码
以下是针对电商交易数据,按交易号合并相同行、合并对应单元格内容的VBA代码,无需求和操作:
Sub MergeSameTransactionIDs() Dim ws As Worksheet Dim lastRow As Long, i As Long, j As Long Dim transactionID As String Dim mergeCols As Variant Dim delRows As Range ' 设置目标工作表,可根据实际修改 Set ws = ThisWorkbook.ActiveSheet ' 设置需要合并内容的列(列号,比如A是交易号,B、C、D是要合并的列) mergeCols = Array(2, 3, 4) ' 示例:合并B、C、D列内容,可按需调整 ' 获取数据最后一行 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 从下往上遍历,避免删除行导致的索引混乱 For i = lastRow To 2 Step -1 transactionID = ws.Cells(i, "A").Value ' 查找上方相同交易号的行 For j = i - 1 To 1 Step -1 If ws.Cells(j, "A").Value = transactionID Then ' 合并指定列的内容,用逗号分隔,可修改分隔符 For Each col In mergeCols If ws.Cells(j, col).Value <> "" And ws.Cells(i, col).Value <> "" Then ws.Cells(j, col).Value = ws.Cells(j, col).Value & ", " & ws.Cells(i, col).Value Else ws.Cells(j, col).Value = ws.Cells(j, col).Value & ws.Cells(i, col).Value End If Next col ' 标记要删除的行 If delRows Is Nothing Then Set delRows = ws.Rows(i) Else Set delRows = Union(delRows, ws.Rows(i)) End If Exit For End If Next j Next i ' 删除重复的行 If Not delRows Is Nothing Then delRows.Delete End If MsgBox "合并完成!", vbInformation End Sub
使用步骤
- 打开你的电商交易数据Excel文件
- 按下
Alt + F11打开VBA编辑器 - 插入新模块:右键点击左侧工程窗口中的工作簿名称 → 插入 → 模块
- 将上述代码粘贴到模块中
- 根据你的实际数据调整:
- 修改
mergeCols数组,填入需要合并内容的列号(比如交易号在A列,要合并B、E列就改成Array(2,5)) - 如果交易号不在A列,修改代码中所有
"A"为对应的列标(比如交易号在C列就改成"C")
- 修改
- 回到Excel,按下
Alt + F8,选择MergeSameTransactionIDs并执行
注意事项
- 执行前建议先备份原数据,避免误操作导致数据丢失
- 可修改代码中的分隔符(
,)为你需要的符号,比如换行符vbCrLf或者分号; - 确保交易号列没有空值,否则可能导致合并异常
示例效果
原数据:
交易号 商品名称 备注 TX001 手机 顺丰 TX001 耳机 无 TX002 充电器 京东
合并后:
交易号 商品名称 备注 TX001 手机, 耳机 顺丰, 无 TX002 充电器 京东
内容的提问来源于stack exchange,提问作者Cahyo Permadi
相关产品推荐
相关产品推荐

