条件付き書式のVBAコードは、単一のシートや範囲を対象に書くことが多いですが、実務では 複数シートや複数ブックに同じルールを適用したい 場面もよくあります。
この記事では、再利用性の高い「構造化マクロ」として条件付き書式を組み立てる考え方を解説します。
目次
1. なぜ構造化が必要なのか?
- シートが増えるたびにコードを書き直すのは非効率
- ブックが変わっても同じルールを適用したい場合 に対応できる
- 一度作れば何度も呼び出せる「汎用的な部品」 として活用できる
2. サブルーチン化して再利用する
サンプル:共通の条件付き書式を適用するサブルーチン
Sub ApplyConditionalFormatting(targetRange As Range)
'対象範囲の条件付き書式をリセット
targetRange.FormatConditions.Delete
'条件1:100未満 → 赤文字
targetRange.FormatConditions.Add _
Type:=xlCellValue, _
Operator:=xlLess, _
Formula1:="100"
targetRange.FormatConditions(1).Font.Color = RGB(255, 0, 0)
'条件2:200以上 → 青文字
targetRange.FormatConditions.Add _
Type:=xlCellValue, _
Operator:=xlGreaterEqual, _
Formula1:="200"
targetRange.FormatConditions(2).Font.Color = RGB(0, 0, 255)
End Sub
💡 このサブルーチンを作っておけば、あとは ApplyConditionalFormatting
を呼び出すだけで使えます。
3. 複数シートに適用する例
Sub 条件付き書式_全シートに適用()
Dim ws As Worksheet
Dim lastRow As Long
Dim rng As Range
For Each ws In ThisWorkbook.Sheets
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Set rng = ws.Range("A2:A" & lastRow)
Call ApplyConditionalFormatting(rng)
Next ws
End Sub
ポイント
- すべてのシートを
For Each ws In ThisWorkbook.Sheets
で順に処理 - サブルーチンを呼び出すだけで共通ルールを適用できる
4. 別ブックに適用する例
Sub 条件付き書式_別ブックに適用()
Dim wb As Workbook
Dim ws As Worksheet
Dim lastRow As Long
Dim rng As Range
'既に開いているブックを指定
Set wb = Workbooks("SalesData.xlsx")
For Each ws In wb.Sheets
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
Set rng = ws.Range("B2:B" & lastRow)
Call ApplyConditionalFormatting(rng)
Next ws
End Sub
ポイント
Workbooks("ブック名.xlsx")
で対象ブックを指定- 構造が同じ複数ブックに横展開できる
5. 構造化マクロのメリット
- 再利用性が高い:異なる範囲・シート・ブックに流用可能
- メンテナンス性向上:条件を変更するときはサブルーチンだけ直せばOK
- 作業効率アップ:1つのマクロで大量のシート・ブックに書式設定できる
6. まとめ
- 条件付き書式を「サブルーチン化」することで汎用性が高まる
- 複数シート・別ブックに簡単に適用できる
- 実務では共通ルールを一括適用するシナリオに非常に有効
コメント