あるセルがセル範囲に含まれるかどうか


あるセルが、あるセル範囲内にあるかどうかを判定するには、ApplicationオブジェクトのIntersectメソッドを使うと便利です。Intersectメソッドは、

Intersect(範囲1, 範囲2)

のようにしたとき「範囲1」と「範囲2」で共有しているセルを返します。

上図のような場合、

Sub Sample1()
    MsgBox Application.Intersect(Range("B6:D6"), Range("C3:C9")).Address
End Sub

となります。「範囲1」と「範囲2」に共有するセルがないとき、IntersectメソッドはNothingを返します。したがって、

Intersect(あるセル, あるセル範囲)

の結果がNothingでなかったら、そのセルは、あるセル範囲に含まれていることになります。Nothingかどうかを判定するには

If ○○ Is Nothing Then

のように「Is」を使います。「=」ではありませんので、注意が必要です。ちなみに、Nothingでないかどうかを判定するときは、

If Not ○○ Is Nothing Then

と書きます。

次のコードは、アクティブセルが、セル範囲B2:D5内にあるかどうかを判定します。

Sub Sample2()
    If Application.Intersect(ActiveCell, Range("B2:D5")) Is Nothing Then
        MsgBox ActiveCell.Address(False, False) & "は" & vbCrLf & _
               "セル範囲B2:D5の外です"
    Else
        MsgBox ActiveCell.Address(False, False) & "は" & vbCrLf & _
               "セル範囲B2:D5の中です"
    End If
End Sub