条件付き書式の優先順位を変更する
昨日は、条件付き書式の適用範囲を変えると、条件式の参照先が自動で追従する(らしい)ということが分かった。
infoment.hatenablog.com
そこで今日は、指定した条件付き書式の優先順位変更に挑戦する。
今回は、まずリストボックスに3列目を追加し、「Priority」を表示してみた。
Private Sub UserForm_Initialize() Dim seq() As Variant ReDim seq(1 To ActiveSheet.Cells.FormatConditions.Count, 1 To 3) Dim i As Long Dim FC As FormatCondition For i = 1 To UBound(seq) Set FC = ActiveSheet.Cells.FormatConditions(i) seq(i, 1) = FC.AppliesTo.Address seq(i, 2) = FC.Formula1 seq(i, 3) = FC.Priority Next ListBox1.List = seq End Sub
どうやらこの方法だと、シート全体における優先順位になってしまうらしい。
試しに、上から二つ目の条件の優先順位がどう変化するか確認した。
結果を見ると、2列目の優先順位は変化していない。昨日推測した、「適用範囲を変更すると、優先順位が変化する」という予測は、正しくもあり、正しくも無しといったところか。
2月のカレンダー以外が正しく表示されなかった件については、推測するに、今回統合された条件より優先されるべき4,5番目の条件が、統合された2番より下がってしまったことが原因のようだ。
では、どうするか。とりあえず、まずは他にも統合可能な条件式を統合してみる。すると、優先順位6位の位置にあれば、正しく動くのではないか?と推測できる。
試してみよう。といっても、どうすればいいか良く判らない。
駄目で元々で、試してみた。
Sub ChangePriorityTest() Dim FC As FormatCondition Set FC = ActiveSheet.Cells.FormatConditions(2) FC.Priority = 6 End Sub
すると、上手くいった。こんな方法で良かったのか。いつものようにコードを色々と試しながら記事を書いていたが、今回はかなりの拍子抜けだった。
しかしここでまた、新たな問題が発生した。「2番目を6番目へ」という、恐らく毎回異なるであろう具体的な「順位」を、果たしてどのように得れば良いのか。
新たな悩みが発生したところで、明日に続きます。
参考まで。