Maniac

Application.Union

Application.Unionメソッドは、2つ以上のセル範囲の集合を返します。Rangeオブジェクトを多く使用する場合に重宝します。その機能と特徴を知ることで、プログラムの幅が広がると思います。

機能、構文と使用例

機能:2つ以上のセル範囲の集合を返す
構文:.Union(Arg1, Arg2, ...)

は省略可能です。Application オブジェクトを返すオブジェクト式を指定します。
引数のArg1,Arg2,...は、Rangeオブジェクトを表し、集合させるセル範囲 を指定します。
引数は30まで指定可能です。そのうち第1引数と第2引数は必須です。

名前を定義したセル範囲やSpecialCellsメソッドで取得のセル、そして、Rows・ColumnsプロパティもRangeオブジェクトを返すので、指定が可能です。

Sub Ex_Union_1() '使用例
    Dim objUnion As Range
    Range("A1:B3").Name = "AreaA"
    Range("D1,E2,F5").Value = 1
    Set objUnion = Union( _
                    Range("AreaA"), _
                    Range("D1:F5").SpecialCells(xlCellTypeConstants, 1), _
                    Rows(6), _
                    Columns(7))
    MsgBox objUnion.Address(False, False) '結果[A1:B3,D1,E2,F5,6:6,G:G]
End Sub

Unionメソッドの応用(1)

セル範囲を動的に集合

Unionメソッドを用い、セル範囲を動的に集合させる例です。

Sub Ex_Union_2()
    Dim i As Integer
    Dim objUnion As Range
    Set objUnion = Cells(1, 1)
    For i = 3 To 11 Step 2
        Set objUnion = Union(objUnion, Cells(i, 1))
    Next
    MsgBox objUnion.Address(False, False) '結果[A1,A3,A5,A7,A9,A11]
End Sub

Unionメソッドの応用(2)

セルアドレスの最適化

Unionメソッドはセル範囲を集合させる際に、セルアドレスを最適化する特徴をもっています。隣り合ったセルや隣り合った列を、別の引数に指定した場合は、アドレスを最も合理的なかたちに変換します。

Sub Ex_Union_3()
    Dim objUnion As Range
    Set objUnion = Union(Range("A1:A3"), Range("B1:F3"))
    MsgBox objUnion.Address(False, False) '結果[A1:F3]
End Sub

セルアドレス最適化の応用

セルアドレス最適化の特徴を用いた応用です。
下の例は、第1引数、第2引数に同じRangeオブジェクトを指定しています。
Rangeオブジェクトには、連続したそれぞれの行を指定し、Unionメソッドで、1つの行範囲(セル範囲)に最適化しています。

Sub Ex_Union_4()
    Dim objUnion As Range
    Set objUnion = Range("3:3,4:4,5:5,6:6,7:7")
    objUnion.Select
    MsgBox objUnion.Address(False, False) '結果[3:3,4:4,5:5,6:6,7:7]
    '同じRangeオブジェクトを第1,第2引数に指定
    Set objUnion = Union(objUnion, objUnion)
    objUnion.Select
    MsgBox objUnion.Address(False, False) '結果[3:7]
End Sub


Unionメソッド使用の留意点

処理時間

Unionメソッドは、セルを集合させる、アドレスを最適化するといった重宝する機能をもっていますが、場合によっては処理に時間のかかることがあります。引数の数が多くなったり、アドレスが長い場合は注意が必要です。用途に応じ、使い分けることが大切です。

ページトップへ戻る
Copyright(C) 2009- 坂江保 All Rights Reserved.