UnionメソッドとRangeプロパティのセル範囲の一括選択の機能を比較します。
使用時の制限事項での違いを理解しておくことで有効に利用することが出来ます。
こんにちは、じゅんぱ店長(@junpa33)です。
今回はエクセルVBAで、複数のRangeオブジェクト(セル範囲)を一度にまとめて選択することが出来るUnionメソッドとRangeプロパティについてです。
Rangeプロパティについてはよくご存じでしょうが、
Unionメソッドについては、「あぁ、それね」とすぐに思える人はそんなに多くはいないでしょう。
「Union」はGoogle翻訳で、「連合、結合、合併、合体」と表示されます。
つまり、何かを結合させるメソッドだという事は分かってもらえると思います。
- セルの範囲選択
- Range VS Cells !VBAで使えるのはどっち
- セルの範囲選択と設定は14のツールで対応する
- Rowsプロパティの働きと関連のメソッド
- Columnsプロパティでセルの列を指定する
- EntireRowとRowプロパティの違い
- EntireColumnとColumnの使い方
- Offsetプロパティは指定範囲を移動させる
- Resizeプロパティでセル範囲をサイズ変更
- CurrentRegionは連続データをまとめて掴む
- UnionとRangeの一括選択の働きを比較
- SpecialCellsメソッドはセル検索し選択する
- UsedRangeプロパティの使い方のコツ
- Endプロパティで上下左右の最終セルを取得
- データ入力済セルの最終行番号を取得する
コンテンツ
Rangeプロパティで複数のセル範囲を一括選択
「Rangeオブジェクトと言えば、Rangeプロパティ!」
「このオールラウンドなRangeプロパティで、複数セル範囲の一括選択は十分です。」
確かにRangeプロパティでこの操作を行うことは十分可能です。
では、Rangeプロパティで、複数セル範囲を一括選択してみます。
意識的にセル範囲の個数を多くしたサンプルを準備しました。方眼サイズのセルに文字を書いていきます。
①「Excel」を書く
Rangeプロパティを使って「Excel」という文字を書いてみます。セル参照がやたらと多いです。
Sub UnionRangeサンプル1()
Range("C3:C9,D3:F3,D6:F6,D9:F9,I5,I9,J6,J8,K7,L6,L8,M5,M9,P6:P8," & _
"Q5:S5,Q9:S9,V5:V9,W5:Y5,W7:Y7,W9:Y9,AB3:AB9").Select
Selection.Interior.ColorIndex = 7
Range("A1").Select
End Sub
しっかり書けました。
②「VBA」を書く
同じく次に「VBA」という文字を書いてみます。
Sub UnionRangeサンプル2()
Range("I12:I15,J16:J17,K18,L16:L17,M12:M15,O12:O18,P12:R12,P15:S15," & _
"P18:R18,S13:S14,S16:S17,U15:U18,V13:V14,V16:X16,W12,X13:X14," & _
"Y15:Y18,C14,D15,E16,F17,G18,AB18,AC17,AD16,AE15,AF14").Select
Selection.Interior.ColorIndex = 8
Range("A1").Select
End Sub
ここもしっかり書くことが出来ました。
③「Excel」と「VBA」を一度に書く
Sub UnionRangeサンプル3()
Range("C3:C9,D3:F3,D6:F6,D9:F9,I5,I9,J6,J8,K7,L6,L8,M5,M9,P6:P8," & _
"Q5:S5,Q9:S9,V5:V9,W5:Y5,W7:Y7,W9:Y9,AB3:AB9,I12:I15,J16:J17," & _
"K18,L16:L17,M12:M15,O12:O18,P12:S12,P15:S15,P18:S18,S13:S14," & _
"S16:S17,U15:U18,V13:V14,V16:X16,W12,X13:X14,Y15:Y18,C14,D15," & _
"E16,F17,G18,AB18,AC17,AD16,AE15,AF14").Select
Selection.Interior.ColorIndex = 11
End Sub
コード実行すると、実行時エラーが出てしまいました。書くことが出来ません。
原因は、
Rangeのセル参照で記述する場合には文字数制限があります。255文字を超えるとエラーストップしてしまいます。
です。
Unionメソッドで複数セル範囲を一括選択
上のサンプルコードをUnionメソッドを使って同様に記述していきます。
Unionメソッドの注意点としては、
一括選択できるセル範囲の「個数は30個まで」という制限があるということです。
- ①の「Excel」のセル範囲の個数は21個
- ②の「VBA」のセル範囲の個数は26個
になります。
ですので、Unionメソッドを使ってもそのままのセル範囲の羅列ではエラーになってしまいます。
(ちなみに、セル範囲が1個なのにUnionメソッドを実行してもエラーになります。)
そこで、
「Excel」の部分のそれぞれのセル範囲を「ARange」というセル範囲名で括り
「VBA」の部分のそれぞれのセル範囲を「BRange」というセル範囲名で括り直します。
この2つの新たなセル範囲をUnionメソッドで結合、一括選択することにします。
Sub UnionRangeサンプル4()
Dim ARange, BRange As Range
Set ARange = Range("C3:C9,D3:F3,D6:F6,D9:F9,I5,I9,J6,J8,K7," & _
"L6,L8,M5,M9,P6:P8,Q5:S5,Q9:S9,V5:V9,W5:Y5,W7:Y7,W9:Y9," & _
"AB3:AB9")
Set BRange = Range("I12:I15,J16:J17,K18,L16:L17,M12:M15," & _
"O12:O18,P12:R12,P15:S15,P18:R18,S13:S14,S16:S17," & _
"U15:U18,V13:V14,V16:X16,W12,X13:X14,Y15:Y18,C14," & _
"D15,E16,F17,G18,AB18,AC17,AD16,AE15,AF14")
Union(ARange, BRange).Select
Selection.Interior.ColorIndex = 11
Range("A1").Select
End Sub
この方法で無事文字を書くことが出来ました。
Unionプロパティを実行することは、新たに個々のセル範囲を1つにまとめた新たなRangeオブジェクトとして取得し直すということです。
今回は、その新たなオブジェクトに対して「Selectメソッド」「Interiorプロパティ」を使いましたが、他にも
「Valueプロパティ」「Borderプロパティ」「Copyメソッド」「Deleteッメソッド」「Clearメソッド」などRangeオブジェクト関連のたくさんのプロパティとメソッドを利用することが出来ます。
UnionとRange セル範囲の一括選択のまとめ
「Rangeプロパティでセルの一括選択をする。」「Unionメソッドでセルの一括選択をする。」
利用場面をハッキリ分けて使わないといけないケースは、そんなにないと思います。
Rangeのセル参照が255文字を超えるほど記述することはそんなにないです。そうなる前にオブジェクト変数で処理してしまうでしょう。
つまり、Unionをそうそう使うケースは多くないということになります。
Rangeプロパティをメインで習得しておけばOKではないでしょうか。
Unionメソッドは、まずは知っておくレベル。使わないといけない時に使用法の再チェックという感じではないかな?と思います。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。