UnionとRangeの働きを比較 セル範囲の一括選択

vbaunioneyecatch

UnionメソッドとRangeプロパティのセル範囲の一括選択の機能を比較します。
使用時の制限事項での違いを理解しておくことで有効に利用することが出来ます。

こんにちは、じゅんぱ店長(@junpa33)です。

今回はエクセルVBAで、複数のRangeオブジェクト(セル範囲)を一度にまとめて選択することが出来るUnionメソッドとRangeプロパティについてです。

Rangeプロパティについてはよくご存じでしょうが、

Unionメソッドについては、「あぁ、それね」とすぐに思える人はそんなに多くはいないでしょう。

「Union」はGoogle翻訳で、「連合、結合、合併、合体」と表示されます。

つまり、何かを結合させるメソッドだという事は分かってもらえると思います。

Rangeプロパティで複数のセル範囲を一括選択

vbaunion005

「Rangeオブジェクトと言えば、Rangeプロパティ!」

「このオールラウンドなRangeプロパティで、複数セル範囲の一括選択は十分です。」

確かにRangeプロパティでこの操作を行うことは十分可能です。

では、Rangeプロパティで、複数セル範囲を一括選択してみます。

意識的にセル範囲の個数を多くしたサンプルを準備しました。方眼サイズのセルに文字を書いていきます。

①「Excel」を書く

Rangeプロパティを使って「Excel」という文字を書いてみます。セル参照がやたらと多いです。

UnionRangeサンプル1
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」という文字を書いてみます。

UnionRangeサンプル2
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」を一度に書く

UnionRangeサンプル3
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メソッドで複数セル範囲を一括選択

vbaunion006

上のサンプルコードをUnionメソッドを使って同様に記述していきます。

Unionメソッドの注意点としては、

一括選択できるセル範囲の「個数は30個まで」という制限があるということです。

  •  ①の「Excel」のセル範囲の個数は21個
  •  ②の「VBA」のセル範囲の個数は26個

になります。

ですので、Unionメソッドを使ってもそのままのセル範囲の羅列ではエラーになってしまいます。

ちなみに、セル範囲が1個なのにUnionメソッドを実行してもエラーになります。

そこで、

「Excel」の部分のそれぞれのセル範囲を「ARange」というセル範囲名で括り

「VBA」の部分のそれぞれのセル範囲を「BRange」というセル範囲名で括り直します。

この2つの新たなセル範囲をUnionメソッドで結合、一括選択することにします。

UnionRangeサンプル4
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 セル範囲の一括選択のまとめ

vbaunion007

「Rangeプロパティでセルの一括選択をする。」「Unionメソッドでセルの一括選択をする。」

利用場面をハッキリ分けて使わないといけないケースは、そんなにないと思います。

Rangeのセル参照が255文字を超えるほど記述することはそんなにないです。そうなる前にオブジェクト変数で処理してしまうでしょう。

つまり、Unionをそうそう使うケースは多くないということになります。

Rangeプロパティをメインで習得しておけばOKではないでしょうか。

Unionメソッドは、まずは知っておくレベル。使わないといけない時に使用法の再チェックという感じではないかな?と思います。

エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできます。

Udemy1eyecatch エクセルVBA初級者がUdemyで動画学習する講座おすすめ5選と無料講座の上手な使い方。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

今回の記事はここまでです。   最後までご覧いただき有難うございました。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。