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
vbaunion001a

しっかり書けました。

②「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
vbaunion002

ここもしっかり書くことが出来ました。

③「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
vbaunion003

コード実行すると、実行時エラーが出てしまいました。書くことが出来ません。

原因は、

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
vbaunion004

この方法で無事文字を書くことが出来ました。

Unionプロパティを実行することは、新たに個々のセル範囲を1つにまとめた新たなRangeオブジェクトとして取得し直すということです。

今回は、その新たなオブジェクトに対して「Selectメソッド」「Interiorプロパティ」を使いましたが、他にも

「Valueプロパティ」「Borderプロパティ」「Copyメソッド」「Deleteッメソッド」「Clearメソッド」などRangeオブジェクト関連のたくさんのプロパティとメソッドを利用することが出来ます。

UnionとRange セル範囲の一括選択のまとめ

vbaunion007

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

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

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

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

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

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

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

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

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

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

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

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min