見出し画像

VBA|Excel操作|セル・範囲|Intersect|複数範囲の重なり部分だけ取得する


基本構文

Intersect は、複数 Range の共通部分だけを取り出すための関数である。

(実務テンプレ)

Set {重なり範囲} = Intersect({範囲1}, {範囲2})
If {重なり範囲} Is Nothing Then
    ' 重なりなし
End If

(各要素の意味)

・{重なり範囲}:共通部分を受ける Range 変数
・{範囲1},{範囲2}:重なり判定したい Range

(戻り値の型・性質)

・Range または Nothing
・重なりがない時は Nothing を返す
・Set が必要


サンプルコード

サンプル①:変更されたセルが監視範囲内か判定する

役割:Worksheet_Change で対象列だけ処理する
理由:不要なイベント処理を避けられる
注意:Nothing 判定を省くとエラーになる

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim zrHit As Range

    Set zrHit = Intersect(Target, Me.Range("B:B"))

    If zrHit Is Nothing Then Exit Sub

    MsgBox "B列が変更されました。"
End Sub

サンプル②:表範囲の中にある空白セルだけ取得する

役割:対象表の中の未入力箇所だけ絞る
理由:全シートの空白ではなく、表内だけ見たい
注意:空白セルが1つも無い場合は SpecialCells 側でエラーになるため、必要なら別途保護する

Sub Sample_Intersect_Blank()
    Dim ws As Worksheet
    Dim zrTable As Range
    Dim zrBlank As Range
    Dim zrHit As Range

    Set ws = Worksheets("入力")
    Set zrTable = ws.Range("A1").CurrentRegion
    Set zrBlank = ws.Cells.SpecialCells(xlCellTypeBlanks)

    Set zrHit = Intersect(zrTable, zrBlank)

    If zrHit Is Nothing Then
        MsgBox "表内に空白セルはありません。"
    Else
        zrHit.Interior.Color = RGB(255, 199, 206)
    End If
End Sub

備考

 ○Intersect は「対象範囲に含まれるか」の判定に強い
 ○イベント処理、入力チェック、部分抽出でよく使う
 ○Union が「まとめる」、Intersect が「重なりだけ取る」という対比で覚えると運用しやすい
 ○別シートの Range 同士では使わない

いいなと思ったら応援しよう!

Parusの寺小屋 技術メモや学習の整理として書いています。 もし内容が役に立ったり、続きを読みたいと思っていただけたら、 応援として受け取らせてもらえたら嬉しいです。