Excel VBA | 条件に一致する離れたセルを自動検出して、高速で一括書き換え

Excel VBA VBA
スポンサーリンク

これは セルごとにループするのではなく、配列に一括読み込み → 条件判定 → 一括書き戻し というパターンを使うと爆速になります。


基本パターン(例:金額=0 のセルを「未入力」に書き換え)

Sub 条件一致セル高速書換()
    Dim ws As Worksheet
    Dim rng As Range
    Dim arr As Variant
    Dim i As Long
    
    Set ws = ActiveSheet
    ' 対象範囲(例:C列)
    Set rng = ws.Range("C2:C1000")
    
    ' 一括読み込み
    arr = rng.Value
    
    ' 配列内で条件判定&書き換え
    For i = 1 To UBound(arr, 1)
        If arr(i, 1) = 0 Then
            arr(i, 1) = "未入力"
        End If
    Next i
    
    ' 一括書き戻し
    rng.Value = arr
End Sub
VB

👉 ポイントは セルごとに直接処理しない こと。配列に読み込んでからまとめて書き戻すと、数千行でも一瞬で処理できます。


応用例1:背景色が黄色のセルだけクリア

Sub 背景色黄色セルクリア()
    Dim ws As Worksheet
    Dim rng As Range, c As Range
    
    Set ws = ActiveSheet
    Set rng = ws.Range("A2:A1000")
    
    ' 条件一致セルを「SpecialCells」で抽出
    On Error Resume Next
    Set rng = rng.SpecialCells(xlCellTypeAllFormatConditions)
    On Error GoTo 0
    
    If Not rng Is Nothing Then
        For Each c In rng
            If c.Interior.Color = vbYellow Then
                c.ClearContents
            End If
        Next c
    End If
End Sub
VB

👉 背景色など「値以外の条件」は SpecialCells やループで抽出してから処理。


応用例2:複数シートの「売上列」を一括で NG→OK に変換

Sub 複数シート売上列高速変換()
    Dim ws As Worksheet
    Dim rng As Range
    Dim arr As Variant
    Dim i As Long
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name Like "*月" Then ' 月別シートだけ対象
            Set rng = ws.Range("D2:D" & ws.Cells(ws.Rows.Count, "D").End(xlUp).Row)
            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 If
    Next ws
End Sub
VB

ポイントまとめ

  • 値条件なら配列処理が最速
  • 書式条件なら SpecialCells やループで抽出
  • 複数シートも同じパターンで一括処理可能
  • 離れたセルでも「Areas」や「Union」でまとめて処理

練習課題

  1. 「金額がマイナス」のセルだけ赤文字に書き換えるコードを作る
  2. 「エラーチェック NG」のセルを一括で「修正済」に置き換えるコードを作る
  3. 複数列(A列とC列)を同時に配列処理して高速変換するコードを作る

こうしたパターンを組み合わせると、条件一致セルを自動検出して高速で一括書き換えが可能になります。

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