【VBA】2つのセル範囲の重なり合う部分(共通範囲)を取得する方法|Intersect関数の使い方

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:D12C:E列 の重なり:

重なり部分(列):$C$2:$D$12

範囲 B2:D1210: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 関数を使うことで、条件に応じたセル範囲の抽出や、複数条件にまたがる処理を柔軟に行うことができます。
大量のデータを効率的に処理するための強力な手法ですので、ぜひ活用してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次