特定のセルが条件付き書式に合致しているか判定する方法を紹介します。
残念ながら一発で行う方法はないのですが、
DisplayFormatで判定するのが一番手軽です。
DisplayFormatで判定する
ある条件付き書式が適用されているか調べるプロパティはありませんが、
現在の表示書式を調べるプロパティがあります。
それがDisplayFormatプロパティで、
- DisplayFormat.Interior.Colorで背景色
- DisplayFormat.Font.Colorで文字色
をそれぞれ調べることが出来ます。
これを用い「元の書式と変わっているかどうか」を判定することで、
疑似的に条件付き書式の適用を判定することが出来ます。
' 条件付き書式が適用されているか判定 If 判定セル.Interior.Color = 判定セル.DisplayFormat.Interior Then ' ※ 背景色が元の書式と変わっている=条件付き書式が適用されている
目的に合わせてInterior/Fontを使い分けてください。
もちろん目的の色が分かっている場合は、
それを直接指定して判定することも可能です。
' 合致したら赤文字になる書式の判定 If 判定セル.Font.Color = RGB(255, 0, 0) Then
状況に応じて使い分けてください。
注意点
使用時に注意すべき点としては、
当然ながら「元の書式が既に対象に色になっている」場合は使えません。
あくまで元書式と条件付き書式が異なる場合のみの判定法となります。
もうひとつの注意点として、DisplayFormtはテーブルの縞模様も検知してしまいます。
テーブル内のセルを判定する場合はご注意ください。
それ以外の判定方法について
今回の判定を正確に行いたい場合は、
FormatConditionオブジェクトを参照し、
条件付き書式の中身を調べる必要があります。
FormatCondtionsコレクションをFor Eachで回し、
各条件付き書式を取得していくことになるのですが、
冒頭述べた通り書式の適用を判定するプロパティはありません。
よって「Formula1(設定数式)」などを調べ、
ひとつずつ数式が合致していくか調べる必要があります。
ただし数式は相対参照で記憶されているため、
例えばA10セルにも「=B2<>""」など先頭の式が入っています。
そうなると条件付き書式の設定範囲を調べる必要があり、
取得したところで相当複雑なコードになってしまいます。
それを書くくらいなら条件数式をVBAで再現した方が楽ですし、
結果の着色が分かれば前述のDisplayFormatで十分です。
よほどの事情がなければ、DisplayFormatを使用しましょう。