複数のセル範囲をUnionでまとめる
同じシートに表が2つ、3つある場合などで、それら全ての表に対して枠線の設定など同じ処理したい場合があります。
そのような場合にUnionメソッドを利用することで1度にまとめて処理することができます。
1度にまとめて処理できれば、場合によっては劇的な処理速度の向上につながることもあります。
Unionメソッド
UnionメソッドはApplicationオブジェクトが親オブジェクトになります。
引数にはセル範囲をRangeオブジェクトで指定します。セル範囲は複数指定しなければなりません。セル範囲はカンマ文字(,)で区切ります。
引数のセル範囲が1つしか指定されていない場合はコンパイルエラーになります。
Unionメソッドは複数のセル範囲をまとめた結果をRangeオブジェクトとして返します。
1 |
Rangeオブジェクト = Application.Union(セル範囲1, セル範囲2, ・・・セル範囲n) |
コード
4か所のセル範囲をまとめてそれをRangeオブジェクト変数に設定し、一度に背景色を黄色にするコードです。
1 2 3 4 5 |
Sub UnionTest1() Dim r As Range Set r = Application.Union(Range("A1"), Cells(2, 2), [A3], Range("C3:D4")) r.Interior.ColorIndex = 6 End Sub |
3行目ではUnionの引数のセル範囲をいくつかの書き方にしていますが、Rangeオブジェクトを表す書き方であればRangeでもCellsでも[]でも構いません。
ここではRange変数に設定していますが、Unionメソッドに続けて処理内容を書くことも出来ます。
1 2 3 |
Sub UnionTest2() Application.Union(Range("A1"), Cells(2, 2), [A3], Range("C3:D4")).Interior.ColorIndex = 6 End Sub |
ただ、個人的には一度Rangeオブジェクト変数に格納した上で処理した方が、結果的にコード量の削減やミスの軽減につながると思います。
別シートのセル範囲をまとめることはできない
Unionメソッドは同じシート内のセル範囲に対してしか利用できません。
以下のように別シートのセル範囲をまとめようとすると実行時エラー1004が発生します。
1 2 3 |
Sub UnionTest3() Application.Union(Sheets(1).Range("B2"), Sheets(2).Range("B2")).Select End Sub |