「マクロ union 使い方」
「range 結合 union」
という検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。
Excel VBA(Visual Basic for Applications)の、ApplicationオブジェクトのUnionメソッドの使い方を、
調べていた方による検索でしょうか。
Unionメソッドの動きを確認するサンプルマクロ
Application.Unionは、複数のRangeオブジェクトをまとめた、コレクションとしてのRangeを返すメソッドです。
まずは、Excelのワークシート上で、どのセルが選択されるかを確認しながら、以下のマクロをステップ実行してみてください。
Dim rng As Range
Set rng = Range("B1")
rng.Select
rng.Select
End Sub
まずB1セルが選択され、つづいてB1セルとA2:C3セルが選択された状態になります。
サンプルマクロをステップ実行したときの様子
最初の、
Set rng = Range("B1")
rng.Select
の部分では、オブジェクト変数・rngにB1セルを表すRangeオブジェクトがセットされているだけですから、B1セルだけが選択された状態になります。
つづく、
Set rng = Union(rng, Range("A2:C3"))
の行が、この記事の本題である、Application.Unionメソッドを使っている箇所です。
引数には最低2つの、Rangeオブジェクトを指定します。
ここでは第1引数にオブジェクト変数・rngを、第2引数にB2:C3セルを表すRangeオブジェクトを取得する「Range("B2:C3")」というRangeプロパティを使ったオブジェクト式を指定しています。
UnionメソッドはRangeオブジェクトを返しますから、ここではSetキーワードを使ってオブジェクト変数・rngをセットしなおしています。
Unionメソッドは、複数のRangeオブジェクトをまとめたコレクションとしてのRangeを返しますから、
Set rng = Union(rng, Range("A2:C3"))
が実行されると、オブジェクト変数・rngには、先にセットされていたB1セルと、B2:C3セルを表すRangeオブジェクトがセットされます。
ですからそのあとの、
Select
が実行されると、B1セルとA2:C3セルが選択されます。
Unionメソッドの引数にはRangeオブジェクトを指定できる
Unionメソッドの引数には、Rangeオブジェクトを指定すればいいので、さまざまなオブジェクト式を引数に指定することができます。
以下のサンプルマクロも、Excelのワークシート上でどのセルが選択されるか確認しつつ、ステップ実行してみてください。
Dim rng As Range
Set rng = Range("B1")
rng.Select
Set rng = Union(rng, Range("A2:C3"))
rng.Select
Set rng = Union(rng, Cells(5, 5))
rng.Select
Set rng = Union(rng, Rows(7))
rng.Select
rng.Select
End Sub
Cellsプロパティを使ったオブジェクト式も、
Set rng = Union(rng, Cells(5, 5))
Rowsプロパティを使ったオブジェクト式も、
Set rng = Union(rng, Rows(7))
Columnsプロパティを使ったオブジェクト式も、
Set rng = Union(rng, Columns(9))
Unionメソッドの引数に指定できます。
もちろん、EndプロパティやOffsetプロパティやResizeプロパティも組み合わせられます。
Applicationプロパティは書かなくてもOK
「Application.Union」と、Applicationプロパティから記述しているコードを見かけることもありますが、オブジェクトブラウザーを調べればわかるとおりグローバルメンバーですから、
上位のオブジェクト式「Application.」は省略できます。
いきなり「Union」と書かれていると、一瞬VBAの関数かなと思ってしまうかもしれないので、必要のない「Application.」を書く気持ちもわからなくもないですが。
- Newer:Nothingの反対の判定は?-Not演算子
- Older:Workbooks.Itemとは?
Home » エクセルマクロ・Excel VBAの使い方 » Applicationオブジェクト » Unionメソッドの使い方