[エクセルVBA] デフォルトと同じ様な塗り分けを再現する方法(18色循環など)
2018/04/07
何らかの理由でグラフの色を自力設定しないといけない場合に、デフォルトと同じ様な塗り分けを簡単に再現する方法です。
これを使った例はこちら↓
グラフを2本ずつペアにして同じ色にする方法です。
色は自分で設定することになるので、デフォルトの塗り分けを再現するようにしました。
基本方針
2本ずつペアにして、... 続きを読む
デフォルトの塗り分け
元々の塗り分けは上のようになっていますね。これを再現して下のような塗り分けにします。
できるだけシンプルで分かりやすいコードになるようにしました。色は6色、濃淡(明るさ)が3段階で、18色循環になっています。
濃淡の段階を増やせばもっと多くの色を使うこともできます。
デフォルトの塗り分けを厳密に再現しようとも思ったのですが、どうやらデフォルトの塗り分けでは色ごとに微妙な調整が加えられている(オレンジだけ再度を下げるなど)ようで、ちゃんとやると大変そうなので諦めました。たぶんこれをやりたい人は「デフォルトっぽく分かりやすい塗り分け」を求めているでしょうから、厳密さよりシンプルさを優先しました。
ちなみにデフォルトの塗り分けでは、この濃淡をグラフの本数に合わせて動的に変更しているようです。本数が少なければ濃淡を大きく変化させて、多くなると変化が小さくなっていくようです。結構複雑なことをしているんですね。
ソースコード
色と明るさを順に選んで設定しています。
Dim i As Long, ColorNum As Long ActiveSheet.ChartObjects("グラフ 1").Activate Dim BrightnessList As Variant BrightnessList = Array(0, 0.3, -0.25) For i = 1 To 18 ColorNum = i - 1 ' 色はテーマカラー6色を循環 ActiveChart.SeriesCollection(i).Format.Line.ForeColor.ObjectThemeColor = msoThemeColorAccent1 + ColorNum Mod 6 ' 明るさ 中程度6色 → 明るめ6色 → 暗め6色 → 中程度6色→… で循環(全18色) ' 数値を変えれば明るさを変更できる -1(黒)~1(白) ' 線の場合 ' ActiveChart.SeriesCollection(i).Format.Line.ForeColor.Brightness = BrightnessList((ColorNum \ 6) Mod 3) ' 点または棒の場合 ActiveChart.SeriesCollection(i).Format.Fill.ForeColor.Brightness = BrightnessList((ColorNum \ 6) Mod 3) Next i
まとめ
これでVBAからグラフを塗り直しても、デフォルト色っぽい塗り分けを再現できますね!