和風スパゲティのレシピ

日本語でコーディングするExcelVBA

セルが特定のセル範囲内にあるか判定する-Intersect

あるセルが特定のセル範囲内にあるかを判定する方法を解説します。

セル範囲の交差範囲を取得するIntersectメソッドを使用します。

ソースコード

Dim 判定セル As Range
Set 判定セル = Worksheets("○○").Range("C1")

Dim 対象セル範囲 As Range
Set 対象セル範囲 = Worksheets("○○").Range("B2:E5")

If Not Intersect(判定セル, 対象セル範囲) Is Nothing Then
    MsgBox "判定セルは対象セル範囲内にあります。"
End If

解説

Intersectメソッドは「複数のRangeの重なる範囲を取得」するメソッドで、
たとえば「A1:C10」と「B5:E8」を渡すと「B5:C8」を取得します。

これを単独のセルとセル範囲に対して使用すれば、

  • セルがセル範囲内にあればそのセルと同じRangeオブジェクトを取得
  • セルがセル範囲内になければNothingを返す

という挙動になるためこれを利用しています。


オブジェクトがNothingかどうかは=ではなくIsで判定しますのでご注意ください。

選択セルが対象セル範囲内かを判定する

今回のコードは汎用マクロやダブルクリックマクロなど、
マクロの実行判定に用いることが多いです。

その場合は「Selection」や「Target」に対してIntersectメソッドを実行して下さい。

Sub 選択セルに実行するマクロ()
    
    Dim マクロ実行範囲 As Range
    Set マクロ実行範囲 = Range("C4:F10")

    If Not Intersect(Selection, マクロ実行範囲) Is Nothing Then
        ' ここにマクロを書く
    End If

End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    
    Dim マクロ実行範囲 As Range
    Set マクロ実行範囲 = Range("C4:F10")

    If Not Intersect(Target, マクロ実行範囲) Is Nothing Then
        ' ここにマクロを書く
    End If

End Sub