【转载】EXCEL VBA 通过VBA中的Union合并多个Range选择区域

在Excel中,Union的功能是合并两个或两个以上的选择区域,合并成为一个更大的区域。 所合并的多个选择区域,这些选择区域,可以是不连续的,也可以是连续的。
一般情况下,要使用Union,可通过如下来使用。
expression.Union(Arg1, Arg2, ...)
expression参数为可选。该表达式返回一个Application对象;
Arg1, Arg2, ... Range 类型,必需。必须至少指定两个Range对象。
在使用Union的时候,我们也没有必要使用expression.Union,直接调用Application.Union方法即可。
一、最不灵活的实例 
Dim MyArea1, MyArea2 As Range
Set MyArea1 = Range("A1:B3")
Set MyArea2 = Range("A7:B10")
Application.Union(MyArea1, MyArea2).Select
如上代码,功能是,首先定义两个选择区域,然后,分别设置选择区域为:A1:B3和A7:B10;最后,通过Application.Union把两个选择区域进行合并,并将合并后的区域选中。
当然,Application.Union合并区域,功能是强大的,但是,至少要有两个选择区域;如果有多个,也是可行的,如下代码,通过Application.Union合并三个选择区域,并将其选中。
Dim MyArea1, MyArea2, MyArea3 As Range
Set MyArea1 = Range("A1:B3")
Set MyArea2 = Range("A7:B10")
Set MyArea3 = Range("A12:B14")
Application.Union(MyArea1, MyArea2, MyArea3).Select
以上代码大家都看了,有没有发现问题呢?
当我们在设定选择区域的时候,必须在Range("")指明从哪个单元格到哪个单元格,比如Range("A12:B14")
,那是多么的麻烦。
下面,给大家介绍一下更为灵活方便的方法。
二、较为灵活方便的方法
要选择多个区域并合并,使用单元格名称来确定区域,是多么的不方便。
我们完全可以使用行列的序号来代替单元格名称。
如下代码:
Dim MyArea1, MyArea2, MyArea3 As Range
Set MyArea1 = Range(Cells(1, 1), Cells(3, 3))
Set MyArea2 = Range(Cells(6, 1), Cells(9, 3))
Set MyArea3 = Range(Cells(12, 1), Cells(13, 3))
Application.Union(MyArea1, MyArea2, MyArea3).Select
就是这样,通过Range(Cells(1, 1), Cells(3, 3))来代替Range(“A1:C3”)。
知道为什么要这么使用吗,愿意就是,当您试图通过VBA来确定单元格名称,如A1:C3时,难以构造这样的字符连接。倒不如直接使用行列所在的序号进行替代,因为Cells(行号、列号),里面的行列号,我们可以通过直接指定或者通过循环赋予一个值。
三、更灵活的实例
基于以上两个实例,下面,我们可以构造一个更为灵活的实例。先看如下代码吧:
Application.Union(Range(Cells(1, 1), Cells(11, 3)), Range(Cells(16, 1), Cells(16, 3)), Range(Cells(21, 1), Cells(32, 3))).Select
上述代码中,已经不再单独定义Range对象了,而是在Union方法中,直接调用Range(Cells(1, 1), Cells(11, 3))来合并被选择的单元格区域

posted @ 2021-11-13 17:25  深海澜鲸  阅读(2776)  评论(0编辑  收藏  举报