複数のセル範囲をまとめて扱えるUnionメソッド

公開日:  最終更新日:2020/11/28

構文 Object.Union(Arg1, Arg2, …)

Object:Applicationオブジェクト [省略可能]

Arg1, Arg2, …:セル範囲。セル範囲を,で区切って指定します。

Unionメソッドは、複数の範囲のセルをまとめて、1つとして扱えます。

例えば、複数のセルを選択したい場合、Rangeを使って

Range(“A1:A10,B2,C3”).Selec

Range(“A1,B2,C3”).Selec

のように書くことができます。

選択したいセルが5個、10個と数が少なければこのやり方でも問題はありませんが、50個、100個と数が多い場合は、このやり方だとエラーになります。

Range(“  ”)

 部分に入る文字数が254文字以下と決まっています。255文字以上になるとエラーとなります。

A1からA66までを選択するVBAを書いて、実行をしてみました。

Range("A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21,A22,A23,A24,A25,A26,A27,A28,A29,A30,A31,A32,A33,A34,A35,A36,A37,A38,A39,A40,A41,A42,A43,A44,A45,A46,A47,A48,A49,A50,A51,A52,A53,A54,A55,A56,A57,A58,A59,A60,A61,A62,A63,A64,A65,A66").Select

実行できました。

A1からA67までを選択するVBAを書いて、実行をしてみました。

Range("A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21,A22,A23,A24,A25,A26,A27,A28,A29,A30,A31,A32,A33,A34,A35,A36,A37,A38,A39,A40,A41,A42,A43,A44,A45,A46,A47,A48,A49,A50,A51,A52,A53,A54,A55,A56,A57,A58,A59,A60,A61,A62,A63,A64,A65,A66,A67").Select

エラーになり、実行できませんでした。

A1からA67までを選択する場合のように、 部分に入る文字数が255以上になる場合どうするのか。Unionメソッドを使います。

Union(Range(“A1”), Range(“A2”), Range(“A3”)).Select

というように、Range(“A1”), Range(“A2”), Range(“A3”),~Range(“A67”).Select と書けばいいのです。

例えば、A1からA300までを選択したい場合Unionを使って

     Dim Target As Range
     Dim i As Long
     
     Set Target = Cells(1, 1)
     
     For i = 2 To 300
        Set Target = Union(Target, Cells(i, 1))
     Next i
     Target.Select

と書くこともできます。

サンプル

    Dim Target As Range
    Dim myRange(1 To 3) As Range
    Dim i As Long
    
    Set myRange(1) = Range("A2:C5")
    Set myRange(2) = Range("B8")
    Set myRange(3) = Range("B10:B15")
    
    For i = 1 To 3
        If Target Is Nothing Then
            Set Target = myRange(i)
        Else
            Set Target = Union(Target, myRange(i))
        End If
    Next i

サンプルプログラムでは、変数Targetに“A2:C5”、B8、B10:B15の3つのセル範囲が代入されています。

Target.Count

Targetの中に何つのセルが入っている(セルの個数)が分かります。サンプルの場合だと、19が返ってきます。

Target.Address

Targetのアドレスを知ることができます。サンプルの場合だと、「$A$2:$C$5,$B$8,$B$10:$B$15」が返ってきます。

Target(1).Address

Targetに格納されている1つめのアドレスを取り出すことが出来ます。サンプルの場合だと、「$A$2」です。

Target(2).Address  で、Targetに格納されている2つめのアドレスを取り出すことは出来ません。サンプルの場合、「$B$2」が返ってきて、2つめのアドレスが取り出せたように思いますが、1つめのアドレスの次の列のアドレスを返すようです。試しに、サンプルプログラムに

For i = 1 To 100

Cells(i, 18) = Target(i).Address

Next i

を追加して、Target(i)のデータをセルに書き出してみました。

$A$2,$B$2,$C$2,$A$3,$B$3,$C$3~A$5,$B$5,$C$5,$A$6,$B$6,$C$6~

という結果になり、Targetに格納されているデータとは違っていました。

Unionメソッドは、FindNextメソッドと組み合わせて、検索して見つかった複数のセルの文字の色を変える

複数のセル範囲にまとめて罫線を設定する

などの様に、複数のセル範囲に対して、何か設定(文字の色を変えるなど)を一気にする場合にUnionメソッドを使うと良いです。

シェアありがとうございます

  • このエントリーをはてなブックマークに追加
  • Pocket

関連記事-こちらもどうぞ

  • 記事はありませんでした

Your Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑