VBA入門
UnionメソッドとAreasプロパティ

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日:2023-08-24

第103回.UnionメソッドとAreasプロパティ


UnionメソッドはApplicationのメソッドです。
複数のセル範囲を集め、1つのRangeオブジェクとして参照することができます。
つまり、Unionメソッドは複数のRangeオブジェクトを連結して1つのRangeオブジェクトにします。
マクロVBAにおいて、セル範囲に次々に別のセル範囲を追加して、最後にまとめて処理するような場合に便利です。


複数のセル範囲が1つのRangeオブジェクトに入っている場合、
それぞれのセル範囲を取得するには、Areasプロパティを使用します。


Unionメソッド

2つ以上のセル範囲の集合のRangeオブジェクトを返します。

Application.Union(Arg1, Arg2, Arg3, ・・・, Arg30)

Arg1 セル範囲 (Range オブジェクト) を指定します。
Arg2 セル範囲 (Range オブジェクト) を指定します。
Arg3 セル範囲 (Range オブジェクト) を指定します。
Arg30 セル範囲 (Range オブジェクト) を指定します。

Application.は省略可能です。
Arg1とArg2は必須です、Arg3以降はオプションになります。


Areasプロパティ

RangeオブジェクトのAreasプロパティは、複数の選択範囲にあるすべてのセル範囲を表すAreasコレクションを取得します。
RangeのAddress文字列の,カンマで区切られたそれぞれのセル範囲のRangeオブジェクトのコレクションになります。
Rangeオブジェクトの中に、複数のRangeオブジェクトが含まれている状態です。
単数形のAreaオブジェクトは存在しません。ただし以下では単一の意味でAreaと表記しています。

Areasコレクションから単一のRangeオブジェクトを取得するのには、Areas (index)を使用します。
インデックス番号は、領域が選択された順序に対応します。

Rangeオブジェクトに含まれるAreasコレクションの要素数は、Areas.Countで取得できます。
Range(…).Countはセル数ですが、Areas.CountはArea(Rangeオブジェクト)の数になります。
1つのRangeオブジェクトには少なくとも1つのAreaが存在しますので、Areas.Countの最小値は1になります。

Range("A1,A3:A5,A7")
この場合は、
Areas.Countは3になり、
Areas(1)はRange("A1")
Areas(2)はRange("A3:A5")
Areas(3)はRange("A7")
このようになります。


Unionメソッドで連結した結果のRangeオブジェクトの状態について

Unionメソッドは、引数のRangeオブジェクトを順に連結していきます。
このとき、単にRangeオブジェクトをつなげるだけではなく、
包含されるセル範囲等、1つの矩形範囲にまとめられるものは1のセル範囲として返されます。

片方が包含されている場合

Debug.Print Union(Range("A1:A5"), Range("A2:A3")).Address

この結果は、
$A$1:$A$5


新たな矩形セル範囲になる場合

Debug.Print Union(Range("A1:A3"), Range("A4:A5")).Address
Debug.Print Union(Range("A1,A3"), Range("A2")).Address
Debug.Print Union(Range("A1:A3"), Range("B1:B3")).Address

この結果は、
$A$1:$A$5
$A$1:$A$3
$A$1:$B$3


1つの矩形セル範囲にまとめられない場合

Debug.Print Union(Range("A1:A3"), Range("A2:B2")).Address
Debug.Print Union(Range("B3:C5"), Range("A1:B5")).Address

この結果は、
$A$1:$A$3,$A$2:$B$2
$B$3:$C$5,$A$1:$B$5

矩形のセル範囲にまとめられない場合は、元のRangeオブジェクトのセル範囲が維持されます。
また、Union結果のRangeオブジェクトの中の順番は、左から順に連結されます。
連結された結果の矩形セル範囲がいくつのセル範囲になっているかは、Areas.Countで取得できます。

Debug.Print Union(Range("A1:A3"), Range("A2:B2")).Address
Debug.Print Union(Range("A1:A3"), Range("A2:B2")).Areas.Count
Debug.Print Union(Range("B3:C5"), Range("A1:B5"), Range("A2:A3")).Address
Debug.Print Union(Range("B3:C5"), Range("A1:B5"), Range("A2:A3")).Areas.Count

この結果は、
$A$1:$A$3,$A$2:$B$2
2
$B$3:$C$5,$A$1:$B$5
2


Unionメソッドの使用例

Dim MyRange As Range
For i = 2 To 10 Step 2
  If MyRange Is Nothing Then
    Set MyRange = Cells(i, 1)
  Else
    Set MyRange = Application.Union(MyRange, Cells(i, 1))
  End If
Next i
MyRange.Value = "UNION"

2行目から10行目までの偶数行のA列に、"UNION"と入れています。
これは、以下の処理と同じになります。

Dim i As Long
Dim strRange As String
For i = 2 To 10 Step 2
  If strRange = "" Then
    strRange = Cells(i, 1).Address
  Else
    strRange = strRange & "," & Cells(i, 1).Address
  End If
Next i
Range(strRange).Value = "UNION"

ただし、Rangeの文字列は、255文字までなので、
それ以上になる場合は、Unionメソッドを使う必要があります。


Unionメソッドの実践例

指定文字、指定数式でジャンプ機能(Union)
・ジャンプのセル選択以外でセルを選択するには ・指定文字、指定数式でジャンプ機能のVBA ・指定文字、指定数式でジャンプ機能の解説 ・指定文字、指定数式でジャンプ機能の最後に
セル番地でバラバラに指定されたセルの削除
シート内の複数のセルを削除します。削除するセルはバラバラです。A2,A4,B5:B7,C3,E5,E6,E9,… さて、どういうVBAを書いたら良いでしょうか。セル削除後は上方向にシフトします。セルの削除についての基本は以下を参照してください。
VBAのFindメソッドの使い方には注意が必要です
・1.処理速度が遅い ・2.指定オプションがシート操作とリンクしている ・「値」で検索した場合は、表示形式に依存した検索になる ・最後に

Unionメソッドは、そんなに頻繁につかうものではありませんので、
細部については、必要になった時に調べれば良いでしょう。
しかし、
これを知らないと解決できないような場合もでてきます。
Intersectメソッドと合わせてしっかり使えるようになっておきましょう。
・Intersectメソッド ・Intersectの使用例 ・Intersectメソッドの最後に

以下も参考にしてください。
Rangeオブジェクトの論理演算(差集合と排他的論理和)
・集合について ・Rangeオブジェクトの論理演算のVBAについて ・和集合:Unionメソッド ・積集合:Intersectメソッド ・補集合 ・差集合 ・排他的論理和 ・Rangeオブジェクトの論理演算VBAの使い方とテスト




同じテーマ「マクロVBA入門」の記事

第100回.InputBoxメソッド(インプットボックス)
第101回.Midステートメント
第102回.Intersectメソッド
第103回.UnionメソッドとAreasプロパティ
第104回.GetPhoneticメソッドとSetPhoneticメソッド(フリガナ)
第109回.列挙型(列挙体)Enum
第110回.ユーザー定義型・構造体(Type)
第111回.静的配列
第112回.動的配列(Redim)
第113回.配列に関連する関数
第114回.セル範囲⇔配列(マクロVBA高速化必須テクニック)


新着記事NEW ・・・新着記事一覧を見る

第5章:AI×VBAでつまづかない!トラブルシューティングとAIとの付き合い方 |生成AI活用研究(2025-05-20)
第4章:【事例で学ぶ】AIとVBAでExcel作業を劇的に効率化する! |生成AI活用研究(2025-05-20)
第3章:AIを「自分だけのVBA先生」にする!質問・相談の超実践テクニック|生成AI活用研究(2025-05-19)
第2章 VBAって怖くない!Excelを「言葉で動かす」(超入門)|生成AI活用研究(2025-05-18)
第1章:AIって一体何?あなたのExcel作業をどう変える?(AI超基本)|生成AI活用研究(2025-05-18)
AI時代のExcel革命:AI×VBAで“書かない自動化”超入門|生成AI活用研究(2025-05-17)
Geminiと100本ノック 23本目:シート構成の一致確認|生成AI活用研究(5月16日)
AIが問う出版の未来は淘汰か進化か:AIと書籍の共存の道とは|生成AI活用研究(2025-05-16)
Geminiと100本ノック 22本目:FizzBuzz発展問題|生成AI活用研究(5月15日)
すぐに使える!生成AI プロンプト作成 実践ガイド|生成AI活用研究(2025-05-15)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.ひらがな⇔カタカナの変換|エクセル基本操作
6.RangeとCellsの使い方|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.FILTER関数(範囲をフィルター処理)|エクセル入門
10.条件分岐(Select Case)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ