Excelで表を作成するとき、こんな作業をしていませんか?
- 特定の条件に合うセルに手作業で色を付けている
- 条件付き書式を毎回手動で設定している
- データが更新されるたびに書式設定をやり直している
- 複数の条件付き書式を一括で設定したい
そんなとき、VBAで条件付き書式を自動設定するマクロが便利です。
今回は、ボタン1つで条件付き書式を自動適用できるVBAコードを紹介します。実務でよく使う条件別に、コピペで使えるコードをまとめました!
こんな人におすすめ
- 毎回同じ条件付き書式を手作業で設定している人
- データが更新されるたびに書式設定をやり直している人
- 複数の条件を一括で適用したい人
- 視覚的に分かりやすい表を自動で作りたい人
このマクロを使えば、条件付き書式の設定が数秒で完了します。
コードの動作イメージ
- マクロを実行すると、指定範囲に条件付き書式が自動適用される
- 条件に合致するセルだけが自動で色分けされる
- データを変更しても、自動で書式が更新される
- 複数の条件を同時に設定できる
実行前:
| 売上 | 担当者 | |-------|--------| | 150 | 山田 | | 80 | 佐藤 | | 200 | 鈴木 | | 50 | 田中 |
実行後:
| 売上 | 担当者 | ← 条件付き書式が適用 |-------|--------| | 150 | 山田 | ← 100以上:青色 | 80 | 佐藤 | ← 80未満:黄色 | 200 | 鈴木 | ← 100以上:青色 | 50 | 田中 | ← 80未満:黄色
基本:数値の大小で色分けする条件付き書式
以下のコードは、数値の大小に応じて自動で色分けするマクロです。
コードの配置場所
- VBAエディタを開く(Alt + F11)
- 左側のプロジェクトエクスプローラーで「挿入」→「標準モジュール」
- 右側のコード画面に以下のコードを貼り付ける
Sub 条件付き書式_数値の大小()
Dim ws As Worksheet
Dim targetRange As Range
Dim lastRow As Long
' アクティブシートを取得
Set ws = ActiveSheet
' A列の最終行を取得
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' 対象範囲を設定(A2からA列最終行まで)
Set targetRange = ws.Range("A2:A" & lastRow)
' 既存の条件付き書式を削除
targetRange.FormatConditions.Delete
' 条件1: 100以上の場合は青色
With targetRange.FormatConditions.Add( _
Type:=xlCellValue, _
Operator:=xlGreaterEqual, _
Formula1:="100")
.Interior.Color = RGB(173, 216, 230) ' 薄い青色
.Font.Bold = True
End With
' 条件2: 80未満の場合は黄色
With targetRange.FormatConditions.Add( _
Type:=xlCellValue, _
Operator:=xlLess, _
Formula1:="80")
.Interior.Color = RGB(255, 255, 153) ' 薄い黄色
End With
MsgBox "条件付き書式を設定しました!", vbInformation
End Sub
コードのポイント解説
① FormatConditionsとは?
targetRange.FormatConditions.Add
FormatConditionsは、セル範囲に条件付き書式を追加・管理するオブジェクトです。
.Add:新しい条件付き書式を追加.Delete:既存の条件付き書式を削除.Count:設定されている条件の数を取得
② Operator(演算子)の種類
| 演算子 | 意味 | 使用例 |
|---|---|---|
| xlEqual | 等しい(=) | 値が100と等しい |
| xlNotEqual | 等しくない(≠) | 値が100でない |
| xlGreater | より大きい(>) | 値が100より大きい |
| xlGreaterEqual | 以上(≧) | 値が100以上 |
| xlLess | より小さい(<) | 値が100より小さい |
| xlLessEqual | 以下(≦) | 値が100以下 |
| xlBetween | 範囲内 | 値が80〜100の間 |
③ Interiorで背景色を設定
.Interior.Color = RGB(173, 216, 230)
RGB(赤, 緑, 青):0〜255の値で色を指定.Font.Bold = True:文字を太字にする.Font.Color:文字色を変更
よく使う色の例:
- 赤色:
RGB(255, 0, 0) - 青色:
RGB(0, 0, 255) - 黄色:
RGB(255, 255, 0) - 緑色:
RGB(0, 255, 0) - 薄い赤:
RGB(255, 200, 200)
応用編①:文字列を含む場合に色を付ける
特定の文字列を含むセルに自動で色を付けるコードです。
Sub 条件付き書式_文字列を含む()
Dim ws As Worksheet
Dim targetRange As Range
Dim lastRow As Long
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Set targetRange = ws.Range("B2:B" & lastRow)
' 既存の条件付き書式を削除
targetRange.FormatConditions.Delete
' 「完了」を含む場合は緑色
With targetRange.FormatConditions.Add( _
Type:=xlTextString, _
String:="完了", _
TextOperator:=xlContains)
.Interior.Color = RGB(198, 239, 206) ' 薄い緑色
.Font.Color = RGB(0, 97, 0) ' 濃い緑の文字
End With
' 「未対応」を含む場合は赤色
With targetRange.FormatConditions.Add( _
Type:=xlTextString, _
String:="未対応", _
TextOperator:=xlContains)
.Interior.Color = RGB(255, 199, 206) ' 薄い赤色
.Font.Color = RGB(156, 0, 6) ' 濃い赤の文字
End With
MsgBox "文字列の条件付き書式を設定しました!", vbInformation
End Sub
TextOperatorの種類:
xlContains:含むxlDoesNotContain:含まないxlBeginsWith:〜で始まるxlEndsWith:〜で終わる
応用編②:日付が期限切れの行を赤色にする
締切日が過ぎた行を自動でハイライトするコードです。
Sub 条件付き書式_期限切れ()
Dim ws As Worksheet
Dim targetRange As Range
Dim lastRow As Long
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Set targetRange = ws.Range("C2:C" & lastRow)
targetRange.FormatConditions.Delete
' 今日より前の日付は赤色
With targetRange.FormatConditions.Add( _
Type:=xlCellValue, _
Operator:=xlLess, _
Formula1:="=TODAY()")
.Interior.Color = RGB(255, 199, 206)
.Font.Bold = True
.Font.Color = RGB(156, 0, 6)
End With
' 今日から3日以内は黄色で警告
With targetRange.FormatConditions.Add( _
Type:=xlCellValue, _
Operator:=xlBetween, _
Formula1:="=TODAY()", _
Formula2:="=TODAY()+3")
.Interior.Color = RGB(255, 235, 156)
End With
MsgBox "期限切れの条件付き書式を設定しました!", vbInformation
End Sub
応用編③:重複データを自動でハイライト
同じ値が複数ある場合に色を付けるコードです。
Sub 条件付き書式_重複をハイライト()
Dim ws As Worksheet
Dim targetRange As Range
Dim lastRow As Long
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Set targetRange = ws.Range("A2:A" & lastRow)
targetRange.FormatConditions.Delete
' 重複する値を黄色でハイライト
With targetRange.FormatConditions.Add( _
Type:=xlExpression, _
Formula1:="=COUNTIF($A$2:$A$" & lastRow & ",A2)>1")
.Interior.Color = RGB(255, 255, 153)
.Font.Bold = True
End With
MsgBox "重複データをハイライトしました!", vbInformation
End Sub
ポイント:
Type:=xlExpression:数式で条件を指定COUNTIF関数で重複をカウント- 2件以上あれば色を付ける
応用編④:上位・下位の値を自動で色分け
上位10%や下位10件を自動で色分けするコードです。
Sub 条件付き書式_上位下位()
Dim ws As Worksheet
Dim targetRange As Range
Dim lastRow As Long
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Set targetRange = ws.Range("A2:A" & lastRow)
targetRange.FormatConditions.Delete
' 上位10%を青色
With targetRange.FormatConditions.Add( _
Type:=xlTop10, _
TopBottom:=xlTop10Top, _
Rank:=10, _
Percent:=True)
.Interior.Color = RGB(155, 194, 230)
.Font.Bold = True
End With
' 下位10%を赤色
With targetRange.FormatConditions.Add( _
Type:=xlTop10, _
TopBottom:=xlTop10Bottom, _
Rank:=10, _
Percent:=True)
.Interior.Color = RGB(255, 199, 206)
End With
MsgBox "上位・下位の条件付き書式を設定しました!", vbInformation
End Sub
TopBottom オプション:
xlTop10Top:上位xlTop10Bottom:下位Percent:=True:パーセント指定Percent:=False:件数指定
応用編⑤:複数条件の組み合わせ(AND条件)
複数の条件を同時に満たす場合に色を付けるコードです。
Sub 条件付き書式_複数条件()
Dim ws As Worksheet
Dim targetRange As Range
Dim lastRow As Long
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Set targetRange = ws.Range("A2:D" & lastRow)
targetRange.FormatConditions.Delete
' A列が100以上 かつ B列が「完了」の行を緑色
With targetRange.FormatConditions.Add( _
Type:=xlExpression, _
Formula1:="=AND($A2>=100,$B2=""完了"")")
.Interior.Color = RGB(198, 239, 206)
.Font.Bold = True
End With
' A列が50未満 かつ C列が期限切れの行を赤色
With targetRange.FormatConditions.Add( _
Type:=xlExpression, _
Formula1:="=AND($A2<50,$C2<TODAY())")
.Interior.Color = RGB(255, 199, 206)
End With
MsgBox "複数条件の書式を設定しました!", vbInformation
End Sub
注意点:
- 数式内の文字列は
""完了""のようにダブルクォートを2つ重ねる $A2:列は固定、行は相対参照AND関数で複数条件を結合
よくあるエラーと対処法
エラー①:実行時エラー’1004′
原因: シートが保護されている、または範囲指定が間違っている
対処法:
- シートの保護を解除してから実行
- 範囲指定が正しいか確認
エラー②:条件付き書式が適用されない
原因: 既存の条件付き書式と競合している
対処法:
' 実行前に既存の条件を削除
targetRange.FormatConditions.Delete
エラー③:既存の条件付き書式と競合する
原因: 複数の条件が重複している
対処法:
条件の優先順位を意識する。後から追加した条件が優先されます。
' 優先度の低い条件を先に設定
' 優先度の高い条件を後に設定
実務での活用例
- ✅ 売上目標達成状況を自動で色分け
- ✅ タスク管理表で期限切れを自動ハイライト
- ✅ 在庫管理で発注点を下回ったら赤色表示
- ✅ 成績表で合格・不合格を自動色分け
- ✅ 勤怠表で残業時間が多い日を警告表示
まとめ:条件付き書式はVBAで自動化
- FormatConditions.Addで条件付き書式を追加
Typeで条件タイプを指定(数値・文字列・数式など)Operatorで演算子を設定(以上・以下・含むなど)Interior.Colorで背景色、Font.Colorで文字色を設定- 複数の条件を組み合わせて高度な書式設定も可能
手作業での書式設定から解放され、データの視認性が劇的に向上します。ぜひコピペして試してみてください!


コメント