跳到主要内容

操作合并单元格

合并单元格时保留每个单元格内容

Excel 的【合并后居中】功能仅保留被合并单元格区域左上角单元格的内容。如果需要全部保留每个单元格的内容,则可以使用如下 VBA 代码。

Sub MergeContent()
    Dim strContent As String
    Dim rng As Range
    ' 判断当前选择对象是否为Range对象
    If TypeName(Selection) = "Range" Then
        ' 遍历每个单元格,将内容连接起来
        For Each rng In Selection
            strContent = strContent & rng.Value
        Next rng
        ' 禁止显示提示和警告消息
        Application.DisplayAlerts = False
        ' 合并选择的单元格区域
        Selection.Merge
        ' 设置合并单元格的内容
        Selection.Value = strContent
        ' 恢复显示提示和警告消息
        Application.DisplayAlerts = True
    End If
    Set rngCell = Nothing
End Sub

运行效果如下:

合并单元格时保留每个单元格内容

取消合并时在每个单元格中保留内容

Excel 取消合并的单元格后,仅左上角单元格保留合并前的内容,如果需要取消合并时在每个单元格中保留内容,可以使用以下 VBA 代码。

Sub UnMergeValues()
    Dim strText As String
    Dim i As Long, intCount As Integer
    
    For i = 2 To Range("B1").End(xlDown).Row
        With Cells(i, 1)
            ' 取得A列每个单元格区域的内容
            strText = .Value
            ' 取得合并区域的单元格数量
            intCount = .MergeArea.Count
            ' 取消合并单元格
            .UnMerge
            ' 将原合并单元格的内容赋值给取消合并后的单元格区域
            .Resize(intCount, 1).Value = strText
        End With
        ' 下一次循环从上一个合并区域的下一个单元格开始
        i = i + intCount - 1
    Next i
End Sub

运行效果如下所示:

取消合并时在每个单元格中保留内容

合并内容相同的单列连续单元格

如果需要合并同一列内容相同的连续单元格,可以使用以下示例:

Sub MergeSameCells()
    Dim intRow As Integer, i As Long
    ' 禁止显示提示和警告消息
    Application.DisplayAlerts = False
    With ActiveSheet
        intRow = .Range("A1").End(xlDown).Row
        ' 注意,从最后一行数据开始循环
        For i = intRow To 2 Step -1
            ' 判读当前单元格值是否与上面单元格相等
            If .Cells(i, 1).Value = .Cells(i - 1, 1).Value Then
                ' 将当前当前单元格和上面单元格合并
                .Range(.Cells(i - 1, 1), .Cells(i, 1)).Merge
            End If
        Next i
    End With
    ' 恢复显示提示和警告消息
    Application.DisplayAlerts = True
End Sub

运行效果如下所示:

合并内容相同的单列连续单元格

评论

您的电子邮件地址不会显示出来。*号为必填项。