Excel VBA一次合并多组单元格

时间:2018-11-30 21:09:39

标签: excel vba excel-vba

这是我的代码:

Sub test()

Dim Mail As Range, Phys As Range, Books As Range, Records As Range

Set Mail = Range("A1:A3")
Set Phys = Range("B1:B3")
Set Books = Range("A4:D4")
Set Records = Range("C1:D3")

Union(Mail, Phys, Books, Records).Merge

End Sub

此代码产生一个合并的单元格A1:D4-我想合并A1:A3,B1:B3等,以便有4个合并的单元格。

我唯一想到的解决方案是分别.merge每个范围:

Mail.Merge
Phys.Merge
Books.Merge
Records.Merge
... etc

但是我认为必须有更好的方法!

1 个答案:

答案 0 :(得分:1)

为什么过分复杂?您可以按照问题中的说明简单地合并单元格(请参阅Sub:OCCAMS_RAZOR)。如果您想做一些精心设计的杀死IMO ,则可以遍历一个具有预定范围要合并的数组(请参阅Sub:OVER_KILL)。

真正的问题是,您为什么需要合并这些范围?

正如@BruceWayne所提到的,在进行分析/摘要时,合并单元格的成本很高。合并的单元格会妨碍简单的单元格引用,公式和VBA。他们还删除了汇总表/数据透视表中数据的选项-这意味着需要手动构建图形。关键是,有很多缺点需要考虑。


Sub OCCAMS_RAZOR()

Dim Mail As Range, Phys As Range, Books As Range, Records As Range

Set Mail = Range("A1:A3"): Mail.Merge
Set Phys = Range("B1:B3"): Phys.Merge
Set Books = Range("A4:D4"): Books.Merge
Set Records = Range("C1:D3"): Records.Merge

End Sub

Sub OVER_KILL()

Dim Arr: Arr = Array("A1:A3", "B1:B3", "A4:D4", "C1:D3")
Dim i As Long

For i = LBound(Arr) To UBound(Arr)
    Range(Arr(i)).Merge
Next i

End Sub

在两个子上,所有.Range都需要使用工作表进行验证