条件付き書式を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
を使って対象範囲を順番に処理- 配列と組み合わせると複数条件を簡単に追加できる
コメント