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

公開日: 

構文 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を書いて、実行をしてみました。

実行できました。

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

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

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

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

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

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

と書くこともできます。

サンプル

サンプルプログラムでは、変数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 ↑