複数のセル範囲からIntersectで重複部分を取得する
複数のセル範囲の中で、セル範囲同士でセルが重複している部分を確認したい場合があります。
Application.Intersectメソッドを使うことで重複部分を取得することができます。
Intersectメソッド
IntersectメソッドはApplicationオブジェクトが親オブジェクトになります。
そのため必ず「Application.Intersect」と書かなければなりません。
引数にはセル範囲をRangeオブジェクトで指定します。セル範囲は複数指定しなければなりません。セル範囲はカンマ文字(,)で区切ります。
引数のセル範囲が1つしか指定されていない場合はコンパイルエラーになります。
Intersectメソッドは複数のセル範囲をまとめた結果をRangeオブジェクトとして返します。重複部分がない場合はNothingを返します。
そのため、重複部分が無い場合を想定したコードにする必要があります。
1 |
Rangeオブジェクト = Application.Intersect(セル範囲1, セル範囲2, ・・・セル範囲n) |
コード
2か所のセル範囲から重複部分をRangeオブジェクト変数に設定し、その重複部分に背景色を黄色にするコードです。
1 2 3 4 5 6 7 |
Sub IntersectTest1() Dim r As Range Set r = Application.Intersect(Range("B2:D4"), Range("C3:E5")) If Not r Is Nothing Then r.Interior.ColorIndex = 6 End If End Sub |
画像の赤枠が1つ目の引数のセル範囲、緑枠が2つ目の引数のセル範囲を示しています。
4行目でIntersectメソッドの結果がNothing(重複セルが無かった)かどうかの判定を行っています。
この判定処理がないと、Rangeオブジェクト変数での処理で、Rangeオブジェクト変数が未設定のため実行時エラー91が発生します。