微信公众号 【EXCEL880】 QQ群【341401932】
课程咨询 加我微信EXCEL880B 试学网址http://v.excel880.com
课程咨询 加我微信EXCEL880B 试学网址http://v.excel880.com
keywords:合并,单元格,拆分,VBA,excel 看到有人问合并拆分单元格,系统的拆分合并比较死板 做了这个工具 可以智能拆分或者合并用户选定区域(可多个连续列批量操作,暂不支持不连续选区) 操作效果如动画所示
代码如下 应该有人能用得到
- Option Explicit
- 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