Excel VBA | UnionやAreasを使って離れたセル範囲をまとめて処理する

Excel VBA VBA
スポンサーリンク

「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などで返る「複数の離れた範囲」を順番に処理できる
  • 配列処理と組み合わせる → 値の変換や置換を爆速で実行可能

練習課題

  1. Unionで「A列とC列の非空セル」をまとめて赤文字にするコードを書く
  2. Areasで「エラーセル」を抽出して「修正済」と書き換えるコードを作る
  3. Unionで「売上列と数量列」をまとめて配列処理し、0を「未入力」に変換するコードを作る

こうしたテクニックを組み合わせると、離れたセル範囲をまとめて処理する爆速自動化が可能になります。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました