VBA 选中区域合并或取消合并单元格

1. 合并单元格

Sub MergeCells()
    Dim i, j As Long
    Dim cell As Range
    Dim intMinRow, intMaxRow As Long
    Dim intMinCol, intMaxCol As Long
    Dim strMergeValue As String
    Dim objMergeArea As Range
    Dim rng As Range
    
    If TypeName(Selection) <> "Range" Then Exit Sub
    
    Set rng = Intersect(ActiveSheet.UsedRange, Selection)
    If rng Is Nothing Then Exit Sub
    
    intMinRow = rng.Cells(1, 1).Row
    intMaxRow = rng.Cells(rng.Cells.Count).Row
    intMinCol = rng.Cells(1, 1).Column
    intMaxCol = rng.Cells(rng.Cells.Count).Column
    
    Application.DisplayAlerts = False
    
    Set rng = Intersect(ActiveSheet.UsedRange, rng)
    
    For j = intMinCol To intMaxCol
        For i = intMaxRow To intMinRow Step -1
            Set cell = Cells(i, j)
            If cell.Value <> "" And cell.Offset(1, 0).Value = cell.Value Then
                cell.Resize(2, 1).Merge
            End If
        Next i
    Next j
    
    Application.DisplayAlerts = True
    'MsgBox "Done."
    MessageBoxTimeout 0, "Done.", "Merge Cells", 0, 1, 500
    
End Sub

2. 取消合并单元格

Sub UnmergeCells()
    Dim i, j As Long
    Dim cell As Range
    Dim intMinRow, intMaxRow As Long
    Dim intMinCol, intMaxCol As Long
    Dim strMergeValue As String
    Dim objMergeArea As Range
    Dim rng As Range
    
    If TypeName(Selection) <> "Range" Then Exit Sub
    
    Set rng = Intersect(ActiveSheet.UsedRange, Selection)
    If rng Is Nothing Then Exit Sub
    
    intMinRow = rng.Cells(1, 1).Row
    intMaxRow = rng.Cells(rng.Cells.Count).Row
    intMinCol = rng.Cells(1, 1).Column
    intMaxCol = rng.Cells(rng.Cells.Count).Column
    
    For i = intMinRow To intMaxRow
        For j = intMinCol To intMaxCol
            Set cell = Cells(i, j)
            strMergeValue = cell.MergeArea.Cells(1, 1).Value
            Set objMergeArea = Range(cell.MergeArea.Address)
            objMergeArea.MergeCells = False
            For Each rng In objMergeArea
                rng.Value = strMergeValue
                'rng.VerticalAlignment = xlCenter
                'rng.HorizontalAlignment = xlLeft
            Next
        Next j
    Next i
    
    'MsgBox "Done."
    MessageBoxTimeout 0, "Done.", "Unmerge Cells", 0, 1, 500
    
End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值