查看: 23  |  回复: 0
  VBA代码 竖向合并拆分单元格
楼主
发表于 2025年3月18日 15:22
Sub 合并拆分()
    Dim s As Boolean, r As Range
    On Error Resume Next
    If Err.Number <> 0 Then Exit Sub
    s = InputBox("请输出序号选择是合并(1)或拆分(0)")    '对话框选1为合并0为拆分
    智能合并拆分 Selection, s
End Sub

Sub 智能合并拆分(r As Range, Optional mergeType As Boolean = True)
    'mergeType=0合并当前选择区域列中相同的单元格
    'mergeType=1拆分当前选择区域的合并单元格,并将原数值填充到拆分后子单元格中
    Dim rg As Range, i&, j&, ur As Range
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    For i = 1 To r.Columns.Count    '当前数据的列内循环
        j = 1
        While j <= r.Rows.Count    '扫描行数据
            If mergeType Then    '合并
                Set rg = r.Cells(j, i)    '待合并区第一个
                If r.Cells(j, i) <> "" Then    '跳过空单元格
                    While r.Cells(j + 1, i) = r.Cells(j, i) And j <= r.Rows.Count - 1    '新合并区向下扫描
                        j = j + 1
                        Set rg = Union(rg, r.Cells(j, i))    '构造合并区
                    Wend
                    If rg.Rows.Count > 1 Then rg.Merge
                End If
            Else    '拆分
                If r.Cells(j, i).MergeCells = True Then    '找到合并单元格,进行拆分
                    Set ur = r.Cells(j, i).MergeArea
                    ur.UnMerge
                    For Each rg In ur    '填充拆分单元格
                        rg.Value = r.Cells(j, i)    '将原合并单元格数据依次填充到拆分后子单元格
                    Next rg
                End If
            End If
            j = j + 1
        Wend
    Next i
    r.Borders.LineStyle = xlContinuous    '目标区线条,可根据自己需要设定
    r.Borders.Weight = xlThin
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub


您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2025 MaNongKu.com