セルの重なった部分を返す Intersect
Intersectはアプリケーション関数で、複数のRangeの共通部分を返すことができます。
もし共通部分が無い場合は Nothing が返ります。
Intersect関数は、イベントのWorksheet_SelectionChangeなどでよく使われますので、例を挙げて解説します。
Intersect関数
Intersect関数の書式は以下のようになっています。
Application.Intersect(rng1, rng2, rng3, ,,,, )
rng1,rng2のように複数の Rnage オブジェクトを指定する事で、共通する部分の Range を返してくれます。
共通部分が無い場合は Nothing が返ります。
Applicationは省略してもOKです。
イベントでの使い方
選択セルが変更された時に呼び出される SelectionChangeイベントを例にして解説します。
SelectionChangeイベントのプロシージャを書き出す
シートのイベントになりますので、プロジェクトウインドウから適当なシートを選択してコードウインドウの上部にあるドロップダウンリストから、WorksheetオブジェクトのSelectionChangeを選択すると自動でコードが書かれます。

サンプルコード
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("C3:E6")) Is Nothing Then
Else
MsgBox "選択範囲です"
End If
End Sub
コード解説
SelectionChangeイベントのプロシージャを書き出したら、上記のようなコードを書いてみましょう。
Intersect関数に Target と Range(“C3:E6”) を引数に与えています。
Targetはイベント発生の際に送られてくるRangeオブジェクトになります。
Target と Range(“C3:E6”) に重なった部分が無ければ If文。
重なった部分があれば Elseに書いたコードが実行されます。
ただ、Targetは複数のセルである場合もあります。
その場合は、ひとつでもRange(“C3:E6”)の範囲内にあればメッセージが表示されます。

もし、1つのセル選択のみ扱いたい場合は、Rangeオブジェクトの Countプロパティで確認するようにすればよいでしょう。
サンプルコード2
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("C3:E6")) Is Nothing Then
Else
MsgBox "選択範囲です"
End If
End Sub
行単位、列単位で反応させたい
決まった行や列が選択された場合を想定したい場合は、上記の例の第二引数のRangeを工夫すれば良いでしょう。
以下はC列で反応させる場合と3行目を反応させる場合の例です。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("C:C")) Is Nothing Then
MsgBox "C列です"
End If
If Not Intersect(Target, Range("3:3")) Is Nothing Then
MsgBox "3行目です"
End If
End Sub
先の例では、Elseにコードを書きましたが、If Not とすれば、短く書くことができます。
最後に
Intersect関数はSelectionChangeなどのイベントでよく使われます。
SelectionChangeイベントは頻繁に発生するので、Intersect関数を用いてセルの範囲を限定して、条件に合わなければさっさと処理を終えるように工夫しましょう。
イベント処理を行う場合は、なるべく処理が早く終わるように書くのがコツです。
また、SelectionChangeなどは、シートモジュールに書くコードなので他のシートには影響しません。 ただし、イベントプロシージャが記述されたシートをコピーするとコピー先のシートにも引き継がれます。
Intersect関数は良く使いますので是非使い方をマスターしてください。