「Union」や「Areas」を使うと、離れたセル範囲をまとめて一括処理できるので、実務で非常に便利です。ここでは VBA の具体例をいくつか紹介します。
基本例:Unionで離れたセルをまとめて処理
Sub Unionで離れたセルまとめ処理()
Dim ws As Worksheet
Dim rng1 As Range, rng2 As Range, rng3 As Range, target As Range
Set ws = ActiveSheet
Set rng1 = ws.Range("A1:A10")
Set rng2 = ws.Range("C1:C10")
Set rng3 = ws.Range("E1:E10")
' 離れた範囲をUnionでまとめる
Set target = Union(rng1, rng2, rng3)
' 一括処理(例:背景色を黄色に)
target.Interior.Color = vbYellow
End Sub
VB👉 A列・C列・E列をまとめて「黄色塗り」にできます。セルごとにループ不要。
応用例1:SpecialCellsで抽出した複数範囲をAreasで処理
Sub Areasで複数範囲処理()
Dim ws As Worksheet
Dim rng As Range
Dim area As Range
Set ws = ActiveSheet
' 条件:空白セルを抽出
On Error Resume Next
Set rng = ws.Range("A1:D20").SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not rng Is Nothing Then
' Areasで分割された範囲をループ
For Each area In rng.Areas
' 各範囲を一括処理(例:赤枠)
area.BorderAround ColorIndex:=3, Weight:=xlMedium
Next area
End If
End Sub
VB👉 SpecialCells は複数の離れた範囲を返すので、Areas で分割して処理します。
応用例2:Union + 配列で高速書き換え
Sub Unionと配列で高速処理()
Dim ws As Worksheet
Dim rng1 As Range, rng2 As Range, target As Range
Dim arr As Variant
Dim i As Long
Set ws = ActiveSheet
Set rng1 = ws.Range("B2:B20")
Set rng2 = ws.Range("D2:D20")
Set target = Union(rng1, rng2)
' 配列に読み込み
arr = target.Value
' 条件一致セルを一括変換(例:NG→OK)
For i = 1 To UBound(arr, 1)
Dim j As Long
For j = 1 To UBound(arr, 2)
If arr(i, j) = "NG" Then
arr(i, j) = "OK"
End If
Next j
Next i
' 一括書き戻し
target.Value = arr
End Sub
VB👉 離れた列(B列とD列)をまとめて配列処理 → 高速で一括書き換え。
ポイントまとめ
- Union → 離れた範囲をまとめて「ひとつのRange」として扱える
- Areas → SpecialCellsなどで返る「複数の離れた範囲」を順番に処理できる
- 配列処理と組み合わせる → 値の変換や置換を爆速で実行可能
練習課題
- Unionで「A列とC列の非空セル」をまとめて赤文字にするコードを書く
- Areasで「エラーセル」を抽出して「修正済」と書き換えるコードを作る
- Unionで「売上列と数量列」をまとめて配列処理し、0を「未入力」に変換するコードを作る
こうしたテクニックを組み合わせると、離れたセル範囲をまとめて処理する爆速自動化が可能になります。


