Unionメソッドあれこれ
思うところあって、Unionメソッドで色々と実験してみた。
Application.Unionは、複数のRangeオブジェクトをまとめた、コレクションとしてのRangeを返すメソッドです。
参照元は、こちら↓。
www.relief.jp
大変分かり易くまとめられていて、昔からお世話になっている。
(いつも有難うございます)。
試しに、Range("A1")をとRange("A2")をまとめてみる。
Sub UnionTest() Cells.Clear Dim myRng As Range Set myRng = Range("A1") Set myRng = Union(myRng, Range("A2")) myRng.Interior.Color = 192 End Sub
結果はこちら。A1とA2がまとめられている。
A1とA3のように、離れていても大丈夫。
Q.1 でこぼこでも大丈夫か
この範囲をUnionで纏めると、どうなるのだろう。
試してみる。
Sub UnionTest() Cells.Clear Dim myRng As Range Set myRng = Range("B2:B7") Set myRng = Union(myRng, Range("A4:C4")) myRng.Interior.Color = 192 End Sub
塗りつぶされた範囲を見てみると、結果は矩形でなくともOKのようだ。
Q.2 重なった範囲は二重カウントされるのか。
A2~C2のセル3つと、
B1~B3のセル3つを纏めてみる。
Sub UnionTest() Cells.Clear Dim myRng As Range Set myRng = Range("A2:C2") Set myRng = Union(myRng, Range("B1:B3")) myRng.Interior.Color = 192 MsgBox myRng.Count End Sub
結果は、6と出た。
B2は重複範囲だが、別物として扱うようだ。
Q.3 Unionの順番は影響するか。
順序を入れ替えてみる。
Sub UnionTest() Cells.Clear Dim myRng As Range Set myRng = Range("A1:A3") Set myRng = Union(myRng, Range("C1:C3")) myRng.Interior.Color = 192 Dim r As Range Dim i As Long: i = 1 For Each r In myRng r = i: i = i + 1 Next End Sub
先にC1:C3をセットすると、順序が逆になった。
コレクションだから、当然と言えば当然か。
Q.4 同一範囲をUnionすることはできるか。
単独範囲の場合。
Sub UnionTest() Cells.Clear Dim myRng As Range Set myRng = Range("A1") Set myRng = Union(myRng, Range("A1")) myRng.Interior.Color = 192 MsgBox myRng.Address End Sub
複数範囲の場合。
Sub UnionTest() Cells.Clear Dim myRng As Range Set myRng = Range("A1:A3") Set myRng = Union(myRng, Range("A1:A3")) myRng.Interior.Color = 192 MsgBox myRng.Address End Sub
共に、何もなかったことになっている。
先程の、重複する場合のカウントと矛盾する気がする。
そこで、以下二つの範囲をUnionしてみる。
① A1:A3
② A2:A4
結果、アドレスは以下のように一まとめで表現された。
先程のデコボコパターンだとこうなる。
さらに、C2:C7を加えてみる。
Sub UnionTest() Cells.Clear Dim myRng As Range Set myRng = Range("B2:B7") Set myRng = Union(myRng, Range("C2:C7"), Range("A4:C4")) myRng.Interior.Color = 192 MsgBox myRng.Address End Sub
結果、以下の二つは
① B2:B7
② C2:C7
一つにまとめて、次のように表現された。
③ B2:C7
従ってQ2の結果は、
単純に「カウントされる」ではなく、Unionの結果として範囲の表記が複数になった場合、たまたま重複するセルがあっても関係なくカウントされる
ということのようだ。どちらか一方が他方を内包する場合、小さい方は飲み込まれて消えてしまうということか。何とも切ない話だ。
今回分かったことの全ては、実は
「ある条件下における特殊解であって、本来のルールとは違う」
こともあるかもしれない。
引き続き調査しつつ、今回の結果を活かしていくとします。
以上、参考まで。