複数のセル範囲をまとめて扱える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を書いて、実行をしてみました。
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メソッドを使うと良いです。
Your Message