当我们需要对工作表中不同的区域进行某一操作时,可以使用Application对象的Union方法先将这些区域合成一个区域,然后对这个合成的区域统一操作。
如下图所示,工作表中有三个单元格区域:A1:B2、C4:D5、E8:F9。
我们要将单元格区域A1:B2和E8:F9的字体设置为红色。根据前面所学的知识,我们可以使用下面的代码实现:
Range(“A1:B2”).Font.ColorIndex =3
Range(“E8:F9”).Font.ColorIndex =3
现在,我们使用Union方法来实现:
Union(Range(“A1:B2”),Range(“E8:F9”)).Font.ColorIndex = 3
为方便理解,将上面的代码分开表示(参考代码中的注释来理解):
Sub testUnion3()
Dimrng As Range ‘设置单元格对象变量
‘将单元格区域A1:B2和E8:F9合成一个单元格区域
Set rng = Union(Range(“A1:B2”),Range(“E8:F9”))
‘将合成的区域中的字体颜色设置为红色
rng.Font.ColorIndex = 3
End Sub
Union方法的语法为:
Application.Union(参数1,参数2,……,参数30)
其中:
Application表示工作簿应用程序对象(顶层对象),可以省略。
参数1,参数2,……,参数30表示单元格对象(Range对象),最少指定2个代表单元格对象的参数,最多30个。
查找并返回多个单元格
在《Excel VBA解读(41):藏得再好也能找到——使用Find方法实现查找》中,我们初步介绍了使用Find方法查找含有特定内容的单元格,并介绍了使用FindNext方法和FindPrevious方法实现连续查找。通过学习,我们知道要使用Find方法找到含有特定内容的所有单元格,只能与FindNext方法或FindPrevious方法配合。
如果结合使用Union方法,可以动态地再增加单元格,从而找到所有的单元格。
本例中,我们仍然使用该工作表。查找工作表中单元格内容为1的所有单元格。代码如下:
Sub testUnion4()
Dim rng As Range ‘声明对象变量
Dim firstRng As String ‘声明字符串变量用来存放变量地址
Dim rngAllFound As Range ‘用于存放所有找到的单元格
‘将查找到的第一个单元格赋值给变量
Set rng =Range(“A1:D3″).Find(What:=”1”, LookIn:=xlValues)
‘判断是否找到了单元格
If Not rng Is Nothing Then
‘若找到,则将其地址保存到变量中
firstRng = rng.Address
‘将找到的单元格添加到存放单元格区域的变量中
Set rngAllFound = rng
Do
‘查找下一个单元格
Set rng =Range(“A1:D3″).FindNext(After:=rng)
‘如果找到的单元格不是最先找到的单元格,则将其存放在单元格区域变量中
If rng.Address <> firstRngThen
Set rngAllFound =Union(rngAllFound, rng)
End If
Loop Until rng.Address = firstRng
End If
‘显示找到的单元格地址
firstRng = ” ”
For Each rng In rngAllFound
firstRng = firstRng & rng.Address& ” ”
Next rng
MsgBox “内容为1的单元格在:”& firstRng
End Sub
运行代码后的结果如下图所示:
代码中使用Union方法找到满足条件的所有单元格,然后可以方便地进一步处理这些单元格。