失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Excel·VBA单元格合并 撤销合并

Excel·VBA单元格合并 撤销合并

时间:2023-07-27 13:18:24

相关推荐

Excel·VBA单元格合并 撤销合并

目录

1,合并选中单元格区域,并保留所有内容举例2,合并选中单元格区域,仅合并连续相同的值3,撤销选中区域内的合并单元格,并对单元格赋值原值举例4,选中列向下合并连续空单元格举例

1,合并选中单元格区域,并保留所有内容

Sub 合并选中单元格区域并保留所有数据()'合并选中单元格,单个单元格、单行、单列、多行多列都适用,可指定分隔符Dim rng As Range, result As Stringdelimiter = ","'分隔符For Each rng In Selection '从上到下、从左到右顺序result = result & delimiter & rng.ValueNext rngresult = Right(result, Len(result) - Len(delimiter)) '返回结果,同时去除开头的分隔符With Selection.Value = Empty '内容清空.Merge '合并单元格.Value = result '内容赋值.WrapText = True '是否自动换行End WithEnd Sub

举例

A、B列选中运行代码后得到D、E列效果

2,合并选中单元格区域,仅合并连续相同的值

Sub 合并选中单元格区域的连续同值()'合并选中单元格,适用单行、单列、多行多列区域Dim rng As Range, dict As Object, i, key_i, vSet rng = Intersect(ActiveSheet.UsedRange, Selection) 'intersect语句避免选择整列造成无用计算Set dict = CreateObject("scripting.dictionary")Application.ScreenUpdating = False '关闭屏幕更新,加快程序运行Application.DisplayAlerts = False '不显示警告信息For Each i In rngkey_i = CStr(i.Value)If Not dict.Exists(key_i) ThenSet dict(key_i) = iElseSet dict(key_i) = Application.Union(dict(key_i), i)End IfNextv = dict.ItemsFor i = 0 To dict.count - 1v(i).MergeNextApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueEnd Sub

3,撤销选中区域内的合并单元格,并对单元格赋值原值

Sub 撤销选中区域的合并单元格()'撤销选中合并单元格,所有单元格赋值,单行、单列、多行多列都适用Dim rng As Range, i&, j&, first_row&, last_row&, first_col&, last_col&Set rng = Intersect(ActiveSheet.UsedRange, Selection) 'intersect语句避免选择整列造成无用计算first_row = rng.Row'选中区域开始行号last_row = first_row + rng.Rows.count - 1 '选中区域结束行号first_col = rng.Column '选中区域开始列号last_col = first_col + rng.Columns.count - 1 '选中区域结束列号Application.ScreenUpdating = False '关闭屏幕更新,加快程序运行Application.DisplayAlerts = False '不显示警告信息For i = first_row To last_rowFor j = first_col To last_colIf Cells(i, j).MergeCells Then '区域内是否包含合并单元格With Range(Cells(i, j).MergeArea.Address) '合并单元格地址.UnMerge '撤销合并.Value = Cells(i, j).Value '全部赋值End WithEnd IfNextNextApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueEnd Sub

举例

A列选中运行sub2后得到C列效果;相反C列选中运行sub3后得到A列效果

4,选中列向下合并连续空单元格

Sub 选中列向下合并连续空单元格()Dim rng As Range, i&, first_row&, last_row&, first_col&, s_row&, e_row&Set rng = Intersect(ActiveSheet.UsedRange, Selection) 'intersect语句避免选择整列造成无用计算If rng.Columns.Count > 1 Then Debug.Print "仅支持单列": Exit Sub '仅支持单列,多列则退出first_row = rng.row'选中区域开始行号last_row = first_row + rng.Rows.Count - 1 '选中区域结束行号first_col = rng.column '选中区域开始列号s_row = first_row: e_row = first_row '行号起止初始化For i = first_row To last_rowIf Cells(i, first_col).Value = "" Thene_row = iElseIf s_row <> e_row Then Cells(s_row, first_col).Resize(e_row - s_row + 1, 1).Merge '非空合并s_row = i: e_row = iEnd IfIf s_row <> e_row Then Cells(s_row, first_col).Resize(e_row - s_row + 1, 1).Merge '最后一个合并NextEnd Sub

举例

A列选中运行代码得到E列效果

如果觉得《Excel·VBA单元格合并 撤销合并》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。