スポンサーリンク

【VBA】条件付き書式をループ処理で一括適用する方法

条件付き書式を1つの範囲に適用するだけなら単純ですが、複数の範囲やシートに同じルールを繰り返し設定したい場合、手作業で書くとコードが長くなってしまいます。
そこで便利なのが ループ処理で条件付き書式を一括適用する方法 です。

この記事では、代表的なループ処理のパターンを紹介しながら、効率的に条件付き書式を適用する方法を解説します。


スポンサーリンク

1. 複数列に同じ条件を適用する例

例:A列~C列の2行目以降で「100未満」のセルを赤文字にする

Sub 条件付き書式_複数列ループ()
    Dim ws As Worksheet
    Dim col As Long
    Dim lastRow As Long
    Dim targetRange As Range
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    'A列を基準に最終行を取得
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    'A列~C列をループ
    For col = 1 To 3
        '対象範囲を設定
        Set targetRange = ws.Range(ws.Cells(2, col), ws.Cells(lastRow, col))
        
        '条件付き書式をリセット
        targetRange.FormatConditions.Delete
        
        '100未満なら赤文字
        targetRange.FormatConditions.Add _
            Type:=xlCellValue, _
            Operator:=xlLess, _
            Formula1:="100"
        targetRange.FormatConditions(1).Font.Color = RGB(255, 0, 0)
    Next col
End Sub

コードのポイント

  • For col = 1 To 3 で列番号をループ
  • Cells(行, 列) を使うと行・列を変数で扱える
  • 同じルールをまとめて適用できる

スポンサーリンク

2. 複数シートに同じ条件を適用する例

例:ブック内のすべてのシートで、B列の「200以上」のセルを黄色背景にする

Sub 条件付き書式_複数シートループ()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim targetRange As Range
    
    'すべてのシートをループ
    For Each ws In ThisWorkbook.Sheets
        'B列の最終行を取得
        lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
        
        'B列2行目から最終行まで
        Set targetRange = ws.Range("B2:B" & lastRow)
        
        '条件付き書式をリセット
        targetRange.FormatConditions.Delete
        
        '200以上なら黄色背景
        targetRange.FormatConditions.Add _
            Type:=xlCellValue, _
            Operator:=xlGreaterEqual, _
            Formula1:="200"
        targetRange.FormatConditions(1).Interior.Color = RGB(255, 255, 0)
    Next ws
End Sub

コードのポイント

  • For Each ws In ThisWorkbook.Sheets で全シートを順番に処理
  • シートごとに同じルールを適用できる
  • 集計やテンプレートなど、シート数が増えても自動対応可能

スポンサーリンク

3. 複数条件を一度に追加する例

例:A列のセルに対して「200〜101なら青」「100以下なら赤」を設定

Sub 条件付き書式_複数条件ループ()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim targetRange As Range
    Dim condValues As Variant
    Dim i As Long
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    'A列の最終行を取得
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    '対象範囲
    Set targetRange = ws.Range("A2:A" & lastRow)
    targetRange.FormatConditions.Delete
    
    '条件リスト(しきい値と色)
    condValues = Array(Array(100, RGB(255, 0, 0)), _
                       Array(200, RGB(0, 0, 255)))
    
    '条件を順に追加
    For i = LBound(condValues) To UBound(condValues)
        targetRange.FormatConditions.Add _
            Type:=xlExpression, _
            Formula1:="=$A2<=" & condValues(i)(0)
        targetRange.FormatConditions(targetRange.FormatConditions.Count).Interior.Color = condValues(i)(1)
    Next i
End Sub

コードのポイント

  • 配列 (Array) を使って条件をまとめる
  • ループで FormatConditions.Add を繰り返し追加
  • 条件が増えてもコードの修正が最小限で済む
  • 先に設定した書式が優先される

スポンサーリンク

4. まとめ

  • ループを使うと「列・シート・条件の数」に関わらず効率的に条件付き書式を設定できる
  • For や For Each を使って対象範囲を順番に処理
  • 配列と組み合わせると複数条件を簡単に追加できる

コメント

タイトルとURLをコピーしました