
【分享成果,随喜正能量】347每个人的认知都有局限,你以为错的,它却是对的,你以为对的,它却是错的,因此不要去嘲讽别人,因为你所嘲讽的,往往是你自己的无知。
第四章 单元格(Range)对象大家好,我们这章开始学习单元格对象。单元格(Range)对象是Excel VBA中最重要的对象之一。本章概述了Range对象的属性和方法,包括如何声明一个单元格对象,如何选择单元格对象,以及对行、列的操作,还讲解了如何对单元格进行复制、粘贴、清除、计数,以及对当前区域CurrentRegion的讲解,还涉及到单元格的联合与交叉等。通过这章的学习,大家会更清楚地看到VBA的结构,以及在实际工作中VBA的综合利用。

大家好,我们在前几节详细介绍了单元格区域的扩展,这些扩展都是基于一个基准单元格来执行的操作。这讲我们讲解Union和Intersect方法,获取的也是一个单元格区域,但这种方法是基于两个基准的操作。下面我们来讲解这两种方法。
1 Application.Union 方法这种方法返回两个或多个区域的合并区域。
语法:expression.Union (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30)
expression:表示 Application 对象的变量。
参数:
① Arg1 必需 Range类型 必须至少指定两个 Range 对象。
② Arg2 必需 Range类型 必须至少指定两个 Range 对象。
③ Arg3– Arg30 可选 Variant类型 一个区域。
2 Application.Intersect方法返回一个Range对象,该对象表示两个或多个区域的矩形交集。如果指定了不同工作表中的一个或多个区域, 则返回错误。
语法:expression.Intersect (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30)
expression:表示 Application 对象的变量。
参数:
① Arg1 必需 Range类型 重叠的区域。 必须至少指定两个 Range 对象。
② Arg2 必需 Range类型 重叠的区域。 必须至少指定两个 Range 对象。
③ Arg3–Arg30 可选 Variant类型 一个相交区域。
3 Union和Intersect方法的应用示例此示例将 Worksheet.Range 属性、Application.Union 方法和 Application.Intersect 方法进行比较。
Range("A1:A10").Select
Range(Range("A1"), Range("A10")).Select
Range("A1, A10").Select
Union(Range("A1"), Range("A10")).Select
Range("A1:A5 A5:A10").Select
Intersect(Range("A1:A5"), Range("A5:A10")).Select
对于以上的示例代码,我们逐个分析一下结果:1)Range("A1:A10").Select, 将选择A1到A10的连续区域
2)Range(Range("A1"), Range("A10")).Select ,和上面的Range("A1:A10").Select返回结果相同。
3)Range("A1, A10").Select,将选择A1和A10两个单元格
4)Union(Range("A1"), Range("A10")).Select 将选择A1和A10两个单元格
5)Range("A1:A5 A5:A10").Select 将选择A5一个单元格
6)Intersect(Range("A1:A5"), Range("A5:A10")).Select 将选择A5一个单元格
不知大家对上述结果是否理解呢?
4 Union和Intersect方法的实例应用通过以上的讲解,我们了解到:Excel VBA中的Union方法返回一个Range对象,该对象表示两个或多个范围的并集;Excel vba中的Intersect方法返回一个Range对象,该对象表示两个或多个范围的交集。
为了更好地说明Union和Intersect方法,我们看下面的实例应用:
实例一:如下面的截图,要求利用Union实现“VBA”单元格的选择:

我们看实现的代码:
Sub mynzR() 'Union和Intersect方法的实例应用1
Dim myRange As Range, mycell As Range, myTEM As Range
I = 0
Set myRange = Range("a1").CurrentRegion
For Each mycell In myRange
If mycell.Value = "VBA" Then
I = I + 1
If I = 1 Then
Set myTEM = mycell
Else
Set myTEM = Union(myTEM, mycell)
End If
End If
Next
myTEM.Select
End Sub
代码截图:

代码讲解:
1) Set myRange = Range("a1").CurrentRegion 将以A1为基准的单元格区域赋给变量myRange。
2)For Each mycell In myRange
If mycell.Value = "VBA" Then
I = I + 1
If I = 1 Then
Set myTEM = mycell
Else
Set myTEM = Union(myTEM, mycell)
End If
End If
Next
在myRange中建立一个遍历循环,如果单元格的值为VBA就将这个单元格加入一个单元格的区域myTEM。
3)If I = 1 Then
Set myTEM = mycell
这是给变量myTEM 赋初始值。
下面看实现的效果:

实例二:仍是上面的截图,要求利用Intersect方法实现右下角值为“NZ”单元格的选择:
我们看下面的代码:
Sub mynzS() 'Union和Intersect方法的实例应用2
Dim myRange As Range, mycell As Range, myTEM As Range
'Set myRange = Range("a1:E12")
Set myRange = Range("a1").CurrentRegion
Set mycell = Range("D7:H12")
Set myTEM = Intersect(myRange, mycell)
myTEM.Select
End Sub
代码截图:

代码讲解:
1) 上述代码首先命名了两个单元格区域myRange和mycell,然后利用Intersect方法进行处理。
2) 对于myRange的区域,我给出了两个语句:
'Set myRange = Range("a1:E12")
Set myRange = Range("a1").CurrentRegion
都是可以用的。
下面看代码的运行结果:

今日内容回向:
1) Union和Intersect方法的意义是什么,有什么作用?
2) 要充分理解这两种方法的语法解释示例。
本讲内容参考程序文件:工作簿04.xlsm

我20多年的VBA成果全在下面的资料中:

