VBA セルに条件付き書式を設定する

スポンサーリンク

セルに条件付き書式を設定する方法

セルに条件書式を設定するには、Range【レンジ】オブジェクトに含まれる条件付き書式の集まりであるFormatConditions【フォーマットコンディションズ】コレクションのAdd【アド】メソッドを使用して、条件付き書式を表すFormatCondition【フォーマットコンディション】オブジェクトを作成します。

作成したFormatCondition【フォーマットコンディション】オブジェクトに対して、Font【フォント】プロパティ、Interior【インテリア】プロパティ、Border【ボーダー】プロパティなどを使用して書式を設定します。

FormatConditionsコレクションのAddメソッドの書式と設定値(引数)の説明

[]内は省略可能です。
オブジェクト.Add(type[,Operator,Formula1,Formula2])
【戻り値】FormatCondition【フォーマットコンディション】オブジェクト

  • オブジェクト(必須)
    条件付き書式の集まりであるFormatConditions【フォーマットコンディションズ】コレクションを指定します。
  • TYpe【タイプ】(必須)
    条件書式の種類をxlFormatConditionType列挙型の定数で指定します。

    xlFormatConditionType列挙型の定数
    定数内容
    xlCellValue1セルの値
    xlExpression2演算
    xlColorScale3カラースケール
    xlDatabar4データバー
    xlTop105上位10の値
    XlIconSet6アイコンセット
    xlUniqueValues8一意の値
    xlTextString9テキスト文字列
    xlBlanksCondition10空白の条件
    xlTimePeriod11期間
    xlAboveAverageCondition12平均以上の条件
    xlNoBlanksCondition13空白の条件なし
    xlErrorsCondition16エラー条件
    xlNoErrorsCondition17エラー条件なし
  • Operator【オペレーター】(省略可)
    条件付き書式の演算子をxlFormatCondithionOperator列挙型の定数で指定します。引数TypeがxlExpressionの場合は、この設定は無視されます。

    xlFormatCondithionOperator列挙型の定数
    定数内容
    xlBetween1範囲内
    xlNotBetween2範囲外
    xlEqual3等しい
    xlNotEqual4等しくない
    xlGreater5次の値より大きい
    xlLess6次の値より小さい
    xlGreaterEqual7以上
    xlLessEqual8以下
  • Formula1【フォーミュラワン】(省略可)
    条件となる値を指定します。数値、文字列、セル参照、数式を使って指定します。
  • Formula2【フォーミュラツゥ】(省略可)
    引数OperatorがxlBetweenまたはxlNotBetweenのときに2つめの条件となる値を設定します。

条件付き書式は、指定したセル範囲に複数指定することができます。条件書式を設定するプロシージャを実行すると、実行のたびに条件付き書式が追加されます。

条件付き書式を削除する方法

指定されたセル範囲に設定されている条件書式を削除するには、FormatConditions【フォーマットコンディションズ】コレクションのDelete【デリイト】メソッドを使用して以下のように記述します。
セル範囲.FormatConditions.Delete
シート全体の設定されている条件書式を削除するには、「Cells.FormatConditions.Delete」と記述します。

不要な条件付き書式を削除しておく方法

条件付き書式を追加すると、すでに設定されている条件付き書式に加えて新しく条件付き書式が追加されます。複数の条件付き書式を追加するのでなければ、不要な条件付き書式を削除してから設定し直します。

選択範囲にすでに条件書式が設定されているかを、FormatConditions【フォーマットコレクションズ】コレクションのCount【カウウント】プロパティで調べ、値が0でなかったら(条件付き書式が設定されていたら)設定されている条件付き書式を削除するコード例は以下のようになります。

A列の2行目から条件があることを想定して、条件付き書式が設定されていたら条件付き書式を削除するコード例

Sub 条件削除()
Dim 最終行 As Long
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
If Range("A2", "A" & 最終行).FormatConditions.Count <> 0 Then
Range("A2", "A" & 最終行).FormatConditions.Delete
End If
End Sub

A列のセルの値が100より大きい場合に文字を太くして背景色を赤にするコード例

Sub 条件書式1()
Dim 最終行 As Long
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
If Range("A2", "A" & 最終行).FormatConditions.Count <> 0 Then
Range("A2", "A" & 最終行).FormatConditions.Delete
End If
With Range("A2", "A" & 最終行).FormatConditions.Add _
(Type:=xlCellValue, Operator:=xlGreater, Formula1:=100)
.Font.Bold = True
.Interior.Color = RGB(250, 0, 0)
End With
End Sub

引数typeをxltextString(テキスト文字例)に設定した場合のコード例

A列に文字列「山」が含まれている文字列のフォントを太くして背景を赤にする例

Sub 条件書式2()
Dim 最終行 As Long
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
If Range("A2", "A" & 最終行).FormatConditions.Count <> 0 Then
Range("A2", "A" & 最終行).FormatConditions.Delete
End If
With Range("A2", "A" & 最終行).FormatConditions.Add _
(Type:=xlTextString, String:="山", TextOperator:=xlContains)
.Font.Bold = True
.Interior.Color = RGB(250, 0, 0)
End With
End Sub

  • 引数Typeの条件をxlTextStringでテキスト文字列にした場合
    引数TextOperatorで引数Stringに対する条件の判断方法をxlContainsOperator列挙型の定数で指定します
xlContainsOperator列挙型の定数
定数内容
xlContainsを含む
xlDoesNotContainを含まない
xlBeginsWithではじまる
xlEndsWithで終わる

指定した期間の場合に書式を設定する

A列に入力されている日付で今週の文字を太くしてセルを赤く塗りつぶすコード例

Sub 条件書式日付()
Dim 最終行 As Long
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
If Range("A2", "A" & 最終行).FormatConditions.Count <> 0 Then
Range("A2", "A" & 最終行).FormatConditions.Delete
End If
With Range("A2", "A" & 最終行).FormatConditions.Add _
(Type:=xlTimePeriod, DateOperator:=xlThisWeek)
.Font.Bold = True
.Interior.Color = RGB(250, 0, 0)
End With
End Sub
  • 引数Typeの条件をxlTimePeriodで期間にした場合
    引数DateOperatorで期間をxlTimePeriod列挙型の定数で指定します
xlTimePeriod列挙型の定数
定数内容
xlYesterday昨日
xlToday今日
xlTomorrow明日
xlLast7Days過去7日間
xlLastWeek先週
xlThisWeek今週
xlNextWeek来週
xlLastMonth先月
xlThisMonth今月
xlNextMonth来月

以上で、条件付き書式の設定についての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告