【ExcelVBA・マクロ】条件付き書式を自動設定する方法|数値・文字列・日付の条件別コード集【初心者向け】

条件付き書式を自動設定する方法 ExcelVBA

Excelで表を作成するとき、こんな作業をしていませんか?

  • 特定の条件に合うセルに手作業で色を付けている
  • 条件付き書式を毎回手動で設定している
  • データが更新されるたびに書式設定をやり直している
  • 複数の条件付き書式を一括で設定したい

そんなとき、VBAで条件付き書式を自動設定するマクロが便利です。

今回は、ボタン1つで条件付き書式を自動適用できるVBAコードを紹介します。実務でよく使う条件別に、コピペで使えるコードをまとめました!


スポンサーリンク
スポンサーリンク

こんな人におすすめ

  • 毎回同じ条件付き書式を手作業で設定している人
  • データが更新されるたびに書式設定をやり直している人
  • 複数の条件を一括で適用したい人
  • 視覚的に分かりやすい表を自動で作りたい人

このマクロを使えば、条件付き書式の設定が数秒で完了します。


コードの動作イメージ

  1. マクロを実行すると、指定範囲に条件付き書式が自動適用される
  2. 条件に合致するセルだけが自動で色分けされる
  3. データを変更しても、自動で書式が更新される
  4. 複数の条件を同時に設定できる

実行前:

| 売上  | 担当者 |
|-------|--------|
| 150   | 山田   |
| 80    | 佐藤   |
| 200   | 鈴木   |
| 50    | 田中   |

実行後:

| 売上  | 担当者 |  ← 条件付き書式が適用
|-------|--------|
| 150   | 山田   |  ← 100以上:青色
| 80    | 佐藤   |  ← 80未満:黄色
| 200   | 鈴木   |  ← 100以上:青色
| 50    | 田中   |  ← 80未満:黄色

基本:数値の大小で色分けする条件付き書式

以下のコードは、数値の大小に応じて自動で色分けするマクロです。

コードの配置場所

  1. VBAエディタを開く(Alt + F11)
  2. 左側のプロジェクトエクスプローラーで「挿入」→「標準モジュール」
  3. 右側のコード画面に以下のコードを貼り付ける
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で文字色を設定
  • 複数の条件を組み合わせて高度な書式設定も可能

手作業での書式設定から解放され、データの視認性が劇的に向上します。ぜひコピペして試してみてください!

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

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