セル領域の操作−セル領域の重複部分を取得する(Intersectメソッド)|Excel VBA |
Intersectとは交差する、交わるという意味です。
ApplictionオブジェクトのIntersectメソッドを使用すると、セル範囲が交差する(重なる)範囲を取得できます。引数には複数のセル範囲を指定できます。
Sub Sample1()
Dim Rng1 As Range, Rng2 As Range
Dim Target As Range
Set Rng1 = Range("A1:D5")
Set Rng2 = Range("C4:E10")
Set Target = Intersect(Rng1, Rng2)
MsgBox Target.Address
End Sub
Intersectメソッドは、表内のデータ領域を取得するときにも役立ちます。
次のサンプルは表領域をCurrentRegionプロパティで取得し、その領域を1行下にずらした領域と重なる範囲をIntersectメソッドで取得します。
Sub Sample2()
Dim DataTable As Range
Set DataTable = Range("A1").CurrentRegion
Intersect(DataTable, DataTable.Offset(1, 0)).Select
End Sub
特定の値を含む行に色をつけるときは、その値を含む行全体と表領域の重なり部分をIntersectメソッドで取得することで、表内の行に色を塗ることができます。
Sub Sample3()
Dim DataTable As Range, Target As Range
Set DataTable = Range("A1").CurrentRegion '表領域
Set Target = Union(Range("B3"), Range("C6")) '100点のセル
Intersect(Target.EntireRow, DataTable).Interior.Color = vbYellow
End Sub
重なるセル範囲がないとき、IntersectメソッドはNothingを返します。
重なるセル範囲がないときにSample1〜3を実行すると、いずれも「オブジェクト変数または With ブロック変数が設定されていません。」の実行時エラーが発生してしまいます。
存在しない可能性がある場合は、次のように処理の前に戻り値がNothingかどうかを判定してください。
Set Target = Intersect(Rng1, Rng2)
If Not Target Is Nothing Then
'重なるセル範囲に対する処理
End If