Excel VBA一次合并多组单元格

Excel VBA一次合并多组单元格,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 这段

以下是我的代码:

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个合并单元格

我能想到的唯一解决方案是
。分别合并
每个范围:

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

但我想一定有更好的办法

为什么要把事情复杂化?您可以按照问题中的说明简单地合并单元格(请参阅子部分:
OCCAMS\u RAZOR
)。如果您想做一些复杂的事情,这就是overkill IMO,您可以循环通过一个具有预定范围的数组进行合并(请参见Sub:
over\u kill

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

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



在两个sub上,所有
.Range
都需要使用工作表进行限定

我可以退一步问一下为什么要合并这些单元格吗?如果要进行任何分析/数据摘要,合并单元格可能会带来更多麻烦。我将在这里发表评论,因为我不能对你刚刚删除的帖子发表评论-在每个模块的顶部指定
Option Explicit
,这将阻止代码愉快地编译并尝试使用拼写错误运行。您之所以获得“需要对象”,是因为未声明变量的运行时类型为
Variant/Empty
,您不能合法地对其进行成员调用。自动合并的原因是用户要求。它提供可扩展/可定制的表单。它必须足够简单,不会吓坏任何不经常使用excel的人,因此任何需要“两个部分B”而不是默认的单个部分B的人都可以单击按钮并创建它。合并是必需的,因此用户可以快速地通过必填字段进行制表。工作表受到保护,以防止用户篡改格式,从而使处理表单的键盘手能够解释表单,这就是为什么需要宏的原因。
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