あるセルが、あるセル範囲内にあるかどうかを判定するには、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