使用方法
1.打开EXCEL后选中需要合并的内容
2.ALT+F11打开VBA界面
3.选中需要执行合并代码的工作表。
4.双击窗体打开代码界面。
5.粘贴以下代码,按F5执行。功能是合并选中区域的重复值与空白值。
Sub MergeDuplicateCellsForMultipleColumns()
Dim currentValue As String
Dim previousValue As String
Dim mergeStartRow As Long
Dim ws As Worksheet
Dim startRow As Long, endRow As Long, startColumn As Long, endColumn As Long
Dim i As Long, j As Long
' 设置工作表和选择范围
Set ws = ThisWorkbook.ActiveSheet
startRow = Selection.Row
endRow = Selection.Rows(Selection.Rows.Count).Row
startColumn = Selection.Column
endColumn = Selection.Columns(Selection.Columns.Count).Column
' 禁用警告弹窗
Application.DisplayAlerts = False
' 清除所有选定区域的合并单元格
ws.Range(Selection.Address).UnMerge
' 遍历选定的列
For j = startColumn To endColumn
previousValue = ""
mergeStartRow = startRow ' 初始化合并起点
' 遍历选定列的每一行
For i = startRow To endRow
currentValue = ws.Cells(i, j).Value
' 如果当前值与前一个值不同(且前一个值非空),需要处理合并
If currentValue <> previousValue Then
' 如果存在一个合并范围,执行合并
If previousValue <> "" Then
ws.Range(ws.Cells(mergeStartRow, j), ws.Cells(i - 1, j)).Merge
End If
' 更新合并起点
If currentValue <> "" Then
mergeStartRow = i
End If
End If
' 更新上一个值
If currentValue <> "" Then
previousValue = currentValue
End If
Next i
' 合并最后一段区域(若存在未处理的合并区域)
If previousValue <> "" And mergeStartRow <= endRow Then
ws.Range(ws.Cells(mergeStartRow, j), ws.Cells(endRow, j)).Merge
End If
Next j
' 恢复警告弹窗
Application.DisplayAlerts = True
End Sub
6.效果如下。