HOME > 即効テクニック > Excel VBA > セル操作関連のテクニック > セル領域の操作−セル領域の重複部分を取得する(Intersectメソッド)

セル領域の操作−セル領域の重複部分を取得する(Intersectメソッド)|Excel VBA

セル操作関連のテクニック

セル領域の操作−セル領域の重複部分を取得する(Intersectメソッド)

(Excel 2000/2002/2003/2007/2010/2013)

■複数のセル範囲の重なる範囲を取得する

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