条件付き書式は便利な機能ですが、「ルールを設定したのに反映されない」 というトラブルはよく発生します。
VBAで操作する際も、思ったように書式が適用されないことがあります。
この記事では、条件付き書式が反映されない主な原因と、そのチェックポイントを整理します。
1. 範囲指定のミス
VBAで条件付き書式を設定するとき、対象範囲が正しく指定されていないと書式が適用されません。
よくある例
Range("A1").FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="=100"
→ この場合、書式が「A1」セルにしか適用されません。
👉 正しくは、書式を付けたい範囲を指定する必要があります。
Range("A1:A10").FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="=100"
2. 数式条件の参照がずれている
数式を使った条件付き書式では、相対参照と絶対参照の違いで意図しない挙動になります。
例:参照ズレの典型
Formula1:="=$B$2=""未処理"""
→ これだと常に「B2」しか参照せず、全体に反映されない。
👉 行ごとに判定したい場合は相対参照を使う必要があります。
Formula1:="=$B1=""未処理"""
3. 優先順位の問題
条件付き書式には「ルールの優先順位」があり、上位のルールに上書きされて見えなくなることがあります。
👉 VBAで設定した場合も、他のルールに隠れて「反映されていない」ように見えるケースがあります。
対処法:
'優先順位を最上位に移動する例
With Range("A1:A10").FormatConditions
.Item(.Count).SetFirstPriority
End With
⚫️ SetFirstPriority を使用すると優先順位を最優先に変更できる
4. データの種類が合っていない
セルに入力されている値が「文字列」扱いになっていると、数値条件が効かないことがあります。
例
セルに「100」と見えていても、実際は文字列 "100"
の場合、
Operator:=xlGreater, Formula1:="=100"
は反応しません。
👉 チェック方法
IsNumeric
で判定- データを一度
Value
として扱う
5. 古いルールが残っている
既存の条件付き書式が邪魔をして新しいルールが反映されないケースもあります。
👉 対処法としては、事前にルールを削除してから追加する方法があります。
With Range("A1:A10")
.FormatConditions.Delete
.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="=100"
End With
6. まとめ
条件付き書式が反映されない原因とチェックポイントは次のとおりです。
- 範囲指定が間違っていないか
- 数式の参照(相対/絶対)が適切か
- 他ルールに優先順位で上書きされていないか
- データ型(数値・文字列)が一致しているか
- 古いルールが残っていないか
コメント