条件付き書式で濃淡をつける

業務で、ある数値を管理している。
予定された大きさがあって、そのとおりであれば「1」(=100%)となる。

1を超えた、つまり予定をオーバーしているものは要監視対象として、セルに色を付けて対応していた。

今までは、とにかく1を超えれば色が付くという〇か×かの見せ方で、どうにも味気なかった。そこで今回、1を超えた程度によって、色を濃くすることに挑戦した。

f:id:Infoment:20191002225951p:plain

パレットのテーマカラーを見ると、上下で少しずつ色が濃くなっていくよう配置されている。

f:id:Infoment:20191002230155p:plain

マクロの記録で確認すると、この部分が関係していることが分かる。
※値が小さいほど濃くなる。マイナス値も可。プロパティの最大値は「1」。

Selection.Interior.TintAndShade = 0.6

docs.microsoft.com

そこで、値が1を超えたところから、超え具合に比例して色も濃くなるようにしてみた。細かく設定するのは面倒なので、ループで処理してみよう。

Sub hoge()
    Dim FC As Excel.FormatConditions
    Set FC = Range("A1:J10").FormatConditions
    Dim i As Double
        For i = 0.1 To 1 Step 0.1
            FC.Add Type:=1, Operator:=5, Formula1:="=" & 1 + i
            FC(FC.Count).SetFirstPriority
            FC(1).Interior.ThemeColor = xlThemeColorAccent2
            FC(1).Interior.TintAndShade = 1 - i
        Next
End Sub

A1からJ10の範囲で、条件付き書式を設定した。設定した時点では、見た目は未だ何も起きていない。
f:id:Infoment:20191002231042p:plain

しかし実際は、このように細かい設定が追加されている。
f:id:Infoment:20191002232151g:plain

次いで、テスト用のマクロがコチラ。
先ほど条件付き書式を設定した範囲に、1以上2未満の数値を入力してみる。

Sub abe_shi()
    Dim r As Range
        For Each r In Range("A1:J10")
            r = 1 + Rnd ' 乱数
        Next
        Range("A1:J10").NumberFormatLocal = "0.0"
End Sub

結果はこちら。
f:id:Infoment:20191002231329g:plain

超過具合が濃淡で表され、今までよりも直感的に把握できるようになった。
早速明日、業務用ツールに組み込むとしよう。
※広い範囲で条件付き書式を用いると、極端に処理速度が遅くなる場合が
 ありますので、ご注意ください。

参考まで。