🦆

VBAでExcelに条件付き書式ルールを適用する

2024/09/08に公開

Excelに条件付き書式という便利な機能が存在しますが、コピー&ペーストなどで非常に壊れやすいです。それでも色付け定義などが便利なため多用してしまうのが現実です。

一度崩れてしまった条件付き書式ルールを再設定する方法はないか考えていたところ
VBAで全部クリアした後に新たな条件付き書式ルールを設定すればいいのではないかという結論にたどり着きました。

VBAでは、FormatConditionsコレクションを通じて条件付き書式を操作でき、FormatConditions.addで条件付き書式ルールの追加を行えるようです。

お試しデータ(カレンダの土日に色付け)

こちらのカレンダーで土曜日と日曜日になっている列の背景色を色付けするルールを設定します。
3行目には日付が入っており、表示形式で"aaa"が設定され曜日表示を行ってます。

ソースコード

Sub weekendConditionalFormatting()
    Dim ws As Worksheet
    Dim rng As Range
    Dim rule As FormatCondition

    Set ws = ActiveSheet ' アクティブシートを設定
    Set rng = ws.Range("B2:AE9") ' 対象範囲
    
    ' 既存の条件付き書式をクリア
    rng.FormatConditions.Delete
    
    ' 土曜日または日曜日の場合の条件付き書式を追加
    Set rule = rng.FormatConditions.Add(Type:=xlExpression, Formula1:="=OR(WEEKDAY(B$3)=1, WEEKDAY(B$3)=7)")
    With rule
        .Interior.Color = RGB(255, 200, 200)
        .StopIfTrue = False
    End With
    
    ' 条件付き書式ルールをExcelに書き込む
    ' 条件付き書式ルールをExcelのUIに表示させるためのトリック。
    ' ダミーのルールを追加し、すぐに削除することで、Excelに変更を認識させています。
    ws.Cells.FormatConditions.Add Type:=xlExpression, Formula1:="=FALSE"
    ws.Cells.FormatConditions(ws.Cells.FormatConditions.Count).Delete
    
    MsgBox "条件付き書式を適用しました。", vbInformation
End Sub

結果

土と日の表の範囲内のみに色付けが適用されました。

Excelの条件付き書式ルールにもしっかりルールが追加されてます。

補足

VBAを扱う場合はxlsmの拡張子で設定する必要があるため、他者へ展開しにくいということもあると思います。もしもxlsxファイルで他者に提供したいといった場合は、別ブックに対して書式ルール追加を行うようにVBAを書き換えると楽になります。

Discussion