查找重疊的單元格區域——Intersect方法

如果我們想知道兩個單元格區域是否有共同的單元格,或者要知道兩個區域中哪些是共有單元格,即兩個單元格區域重合的部分,就可以使用Intersect方法 。
如下圖所示,很容易看出單元格區域A1:C5與B3:E8相重合的區域是B3:C5,也就是紅色單元格部分 。

查找重疊的單元格區域——Intersect方法


下面的代碼獲取上圖中兩個單元格區域重合的部分,并賦值給變量rngIntersect,最后顯示重合區域的單元格地址 。
Sub testIntersect1()
‘聲明單元格對象
Dim rngIntersect As Range
‘獲取相重合的交叉區域
Set rngIntersect =Intersect(Range(“A1:C5”), Range(“B3:E8”))
MsgBox “A1:C5與B3:E8相重合的區域是:”& rngIntersect.Address
End Sub
Intersect方法的語法
表達式.Intersect(Arg1,Arg2,Arg3,…,Arg30)
說明:
表達式是一個代表Application對象的變量,表明Intersect方法屬于Application對象,在Excel中就是指Excel應用本身 。因此,通常在代碼中可以省略前面的Application限定,直接書寫Intersect 。例如我們在本文的示例代碼中均省略了前面的Application 。
必須指定至少兩個Range對象作為其參數 。
其返回值為Range對象 。
我們來看看一些例子,進一步了解Intersect方法及其應用 。
示例:判斷兩個單元格區域是否有重合
下面的例子用來判斷一個區域是否包含另一個區域,即一個區域是另一個區域的子區域 。代碼如下:
Sub testIntersect2()
Dim rng1 As Range, rng2 As Range
Dim rng As Range
‘設置要測試的兩個區域
Set rng1 = Range(“A1:D9”)
Set rng2 = Range(“A1:E11”)
‘獲取兩個區域相重合的區域并存儲在變量中
Set rng = Intersect(rng1, rng2)
‘判斷兩個區域是否存在重合的區域
If Not rng Is Nothing Then
‘判斷兩個區域之間的包含關系
If rng.Address = rng1.Address Then
MsgBox rng2.Address & “包含”& rng1.Address
Else
MsgBox rng1.Address & “包含”& rng2.Address
End If
Else
MsgBox rng1.Address & “和” &rng2.Address & “區域無重疊.”
End If
End Sub
下圖為不同區域的測試結果 。(目前,我們還沒有學習到與用戶交互,所以采用“硬編碼”的形式直接設置兩個區域rng1和rng2 。)
查找重疊的單元格區域——Intersect方法


示例:用VBA實現保護單元格功能
下面是一個示例 。結合運用Union方法和Intersect方法,禁止用戶選擇工作表中B1:B5和C6:C10這兩塊單元格區域,這樣就可以防止用戶修改這兩塊區域中的數據 。代碼如下:
Private SubWorksheet_SelectionChange(ByVal Target As Range)
Dim rngForbidden As Range
‘設置禁止操作的單元格區域
Set rngForbidden =Union(Range(“B1:B5”), Range(“C6:C10”))
‘如果所選擇的單元格沒有處于禁止操作的單元格區域中,則退出程序
If Intersect(Target, rngForbidden) IsNothing Then Exit Sub
‘選擇A1并發出警告
Range(“A1”).Select
MsgBox “不能選擇” &rngForbidden.Address & “中的單元格.”, vbCritical
End Sub
每當用戶在與包含該事件過程的模塊相關聯的工作表中選擇單元格區域時,就會觸發工作表的Worksheet_SelectionChange事件過程 。代碼中,首先使用Union方法定義了由兩個非連續單元格區域組成的禁止操作的區域,然后使用Intersect方法檢查所選擇的區域與禁止操作的區域是否有重合,并作為If語句的判斷條件,如果沒有重合則退出事件過程,用戶正常操作,并不會感覺到什么;如果有重合,則光標定位到單元格A1并給出一條警告消息 。

猜你喜歡