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 同士では使わない
いいなと思ったら応援しよう!
技術メモや学習の整理として書いています。
もし内容が役に立ったり、続きを読みたいと思っていただけたら、
応援として受け取らせてもらえたら嬉しいです。