VBAで複数のセル範囲を操作する際、「2つの範囲が重なっているかどうかを判定したい」というケースがあります。
このような場面では、Intersect
関数を使うことで、重なっている部分(共通範囲)だけを抽出することが可能です。
本記事では、Intersect
を使って2つのセル範囲の交差部分を取得し、それに応じた処理を行う方法を、具体的なコードとともに解説いたします。
目次
コード例:2つの範囲が重なる部分を取得する
Dim sharedRange As Range
' 範囲1と列範囲の交差を取得
Set sharedRange = Intersect(Range("B2:D12"), Columns("C:E"))
If sharedRange Is Nothing Then
MsgBox "セルB2:D12と列C:Eには重なりがありません"
Else
MsgBox "重なり部分(列):" & sharedRange.Address
End If
' 範囲1と行範囲の交差を取得
Set sharedRange = Intersect(Range("B2:D12"), Rows("10:12"))
If sharedRange Is Nothing Then
MsgBox "セルB2:D12と10〜12行には重なりがありません"
Else
MsgBox "重なり部分(行):" & sharedRange.Address
End If
コードの解説
Intersect
関数とは?
Intersect(範囲A, 範囲B)
のように記述することで、**範囲Aと範囲Bの共通部分(交差部分)**を取得できます。- 重なりがない場合は
Nothing
が返されます。
使用している範囲:
Range("B2:D12")
:基本となる矩形のセル範囲Columns("C:E")
:対象の列範囲Rows("10:12")
:対象の行範囲
これらと交差している部分があれば、sharedRange
にその範囲が格納されます。
判定と表示:
If sharedRange Is Nothing
:交差がなければ「重なりなし」と判断.Address
:交差部分が存在する場合、その範囲を表示
実行結果のイメージ
範囲 B2:D12
と C:E列
の重なり:
重なり部分(列):$C$2:$D$12
範囲 B2:D12
と 10:12行
の重なり:
重なり部分(行):$B$10:$D$12
応用:共通範囲にだけ処理を行う
たとえば、重なり範囲にだけ背景色を塗る処理は以下のように記述できます。
If Not sharedRange Is Nothing Then
sharedRange.Interior.Color = RGB(200, 255, 200)
End If
まとめ
処理内容 | 使用構文 | 説明 |
---|---|---|
範囲の交差を取得 | Intersect(範囲1, 範囲2) | 重なりがあれば範囲、なければNothing |
結果の判定 | If ... Is Nothing | 存在有無をチェック |
範囲表示 | .Address | 交差範囲を文字列として取得 |
処理の適用 | .Interior , .Font 等 | 重なり範囲に対する装飾・編集が可能 |
Intersect
関数を使うことで、条件に応じたセル範囲の抽出や、複数条件にまたがる処理を柔軟に行うことができます。
大量のデータを効率的に処理するための強力な手法ですので、ぜひ活用してみてください。