Excel VBA合并单元格

需求说明:

1.合并第一列中连续相同的单元格。
2.根据第一列合并后的范围,合并第二列中对应的单元格。即如果第一列的某些行被合并了,那么第二列中对应的行也会被合并,前提是第二列中的值相同。
3.根据第二列合并后的范围,合并第三列中对应的单元格。即如果第二列的某些行被合并了,那么第三列中对应的行也会被合并,前提是第三列中的值相同。

 

Sub hebin11() ' 定义一个子程序,命名为hebin11
    Dim ln%, a%, i% ' 声明三个变量,ln表示最后一行行号,a和i用于循环计数
    Application.DisplayAlerts = False ' 关闭 Excel 的警告提示,避免合并单元格时弹出警告

    ln = [A65536].End(xlUp).Row ' 找到列A中最后一行有数据的行号(从 A65536 开始向上查找)
    For i = 1 To 1 Step 1 ' 表示循环的列数范围,这里只循环第1列
        For a = ln To 2 Step -1 ' 从最后一行向前(向上)循环到第2行
            ' 如果当前行和上一行的单元格内容相同
            If Cells(a, i) = Cells(a - 1, i) Then
                ' 合并当前行和上一行的单元格(只考虑第1列)
                Range(Cells(a, i), Cells(a - 1, i)).Merge
                
                ' 如果第2列(B列)对应的单元格内容也相同
                If Cells(a, i + 1) = Cells(a - 1, i + 1) Then
                    ' 合并第2列对应的单元格
                    Range(Cells(a, i + 1), Cells(a - 1, i + 1)).Merge
                    ' 如果第3列(C列)对应的单元格内容也相同
                    If Cells(a, i + 2) = Cells(a - 1, i + 2) Then
                        ' 合并第3列对应的单元格
                        Range(Cells(a, i + 2), Cells(a - 1, i + 2)).Merge
                    End If
                End If
            End If
        Next ' 结束内层循环(行循环)
    Next ' 结束外层循环(列循环)
    Application.DisplayAlerts = True ' 恢复 Excel 的警告提示
End Sub ' 子程序结束

可通过 ln = [A65536].End(xlUp).Row 来判断第一列所在位置

 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注