条件付き書式の優先順位

VBAで条件付き書式の追加を複数行う場合、より先に設定したルールの方が自動的に優先順位が高くなります。言い方を変えると、追加順、になります。

あとで優先順位を変更したい場合はFormatConditionクラスのPriorytyプロパティ、SetFirstPriorityメソッド、SetLastPriorityメソッドの3つを利用します。

また、優先順位が上位のルールが適用されたあとに下位のルールを適用したくない場合は以下のプロパティを利用します。

 

優先順位のプロパティを使うよりも削除+優先順に追加した方が簡単

上のプロパティを使えば優先順位の変更は可能ですが、複数のルールの優先順位を変更する場合はかなり難解なコードになります。

例えば、FormatConditions(1)から(4)までの4つのルールがあったとします。

FormatConditions(2)の優先順位を先頭にしようとして「FormatConditions(2).SetFirstPriority」とすると、その直後に2、1、3、4の優先順になります。

この状態からさらに優先順位を変えることになると、変更後のインデックスは何なのかを把握しておく必要があります。

そのため、複数のルールの優先順位を変えるのであれば、条件付き書式を一度削除して優先度順に追加しなおした方がラクなことの方が多いです。

サンプルコード

まず、以下の関数で4つのルールを追加します。

実行後は以下のようになります。

次に、優先順位を入れ替えて、元々の1,2,3,4の順を2,3,4,1に変えます。

実行すると以下のようになります。

コードの7,8,9行目はインデックス4に対する全く同じコードですが、それぞれ対象のルールが異なります。

複数のルールの優先順位を変える場合はこういうわかりにくいコードになる恐れがあるため、上に書いたとおり、削除+追加を検討した方がよいでしょう。