Excel VBA | 実務で超使う「離れたセル × 自動化パターン」

VBA
スポンサーリンク

「離れたセル × 自動化パターン」は、実務で爆速処理を実現するための鉄板テクニック。ここでは 条件一致セルの抽出 → 複数シート一括処理 → 配列で高速化 の流れを VBA でまとめてみます。


1. 条件に一致するセルだけ自動で集めて処理

Sub 金額ゼロセル赤枠()
    Dim ws As Worksheet
    Dim rng As Range, c As Range
    
    For Each ws In ThisWorkbook.Worksheets
        ' 金額列(例:C列)を対象
        Set rng = ws.Range("C2:C" & ws.Cells(ws.Rows.Count, "C").End(xlUp).Row)
        For Each c In rng
            If c.Value = 0 Then
                c.BorderAround ColorIndex:=3, Weight:=xlMedium ' 赤枠
            End If
        Next c
    Next ws
End Sub
VB

👉 条件一致セルだけを検出して処理。背景色や「NG」文字列なども同じパターンで応用可能。


2. 複数シート × 複数セル × 複数列を一括処理

Sub 全シート売上集計()
    Dim ws As Worksheet
    Dim total As Double
    
    total = 0
    For Each ws In ThisWorkbook.Worksheets
        ' 各シートの「売上列(D列)」を合計
        total = total + Application.WorksheetFunction.Sum(ws.Range("D2:D" & ws.Cells(ws.Rows.Count, "D").End(xlUp).Row))
    Next ws
    
    ' 結果をMasterシートに出力
    Sheets("Master").Range("A1").Value = "売上合計"
    Sheets("Master").Range("B1").Value = total
End Sub
VB

👉 全シートの同じ列を一括処理。初期化や集約も同じパターンで可能。


3. 配列と組み合わせて高速処理(爆速)

Sub 配列で高速変換()
    Dim ws As Worksheet
    Dim rng As Range
    Dim arr As Variant
    Dim i As Long
    
    Set ws = ActiveSheet
    Set rng = ws.Range("B2:B1000") ' 対象範囲
    
    ' 一括読み込み
    arr = rng.Value
    
    ' 高速ループで値変換
    For i = 1 To UBound(arr, 1)
        If arr(i, 1) = "NG" Then
            arr(i, 1) = "OK"
        End If
    Next i
    
    ' 一括書き戻し
    rng.Value = arr
End Sub
VB

👉 離れたセルを「配列」に読み込んで処理 → 書き戻し。セルごとのループより数十倍速い。


実務で超使えるパターンまとめ

  • 条件一致セルだけ処理 → 「金額=0」「背景色=黄色」「文字列=NG」など
  • 複数シート一括処理 → 「売上列集計」「A列非空セル集約」「全シートの特定セル初期化」
  • 配列で爆速処理 → 離れたセルをまとめて読み込み → 高速ループ → 一括書き戻し

練習課題

  1. 全シートの「A列非空セル」を配列に集めて1枚のシートにまとめる
  2. 背景色が黄色のセルだけを検出してクリアするコードを書く
  3. 「エラーチェック NG」のセルを一括で「修正済」に置き換えるコードを作る

こうしたパターンを組み合わせると、実務で超使える「離れたセル × 自動化」爆速処理フレームワークが完成します。

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