[エクセルVBA] デフォルトと同じ様な塗り分けを再現する方法(18色循環など)

      2018/04/07

graph-6colors

何らかの理由でグラフの色を自力設定しないといけない場合に、デフォルトと同じ様な塗り分けを簡単に再現する方法です。

これを使った例はこちら↓

[エクセルVBA] グラフを2本ずつ同色に塗り分ける方法
グラフを2本ずつペアにして同じ色にする方法です。 色は自分で設定することになるので、デフォルトの塗り分けを再現するようにしました。 基本方針 2本ずつペアにして、... 続きを読む
SPONSORED LINK

デフォルトの塗り分け

デフォルトの塗り分け

デフォルトの塗り分け

元々の塗り分けは上のようになっていますね。これを再現して下のような塗り分けにします。

graph-6colors

できるだけシンプルで分かりやすいコードになるようにしました。色は6色、濃淡(明るさ)が3段階で、18色循環になっています。

graph-18colors

濃淡の段階を増やせばもっと多くの色を使うこともできます。

デフォルトの塗り分けを厳密に再現しようとも思ったのですが、どうやらデフォルトの塗り分けでは色ごとに微妙な調整が加えられている(オレンジだけ再度を下げるなど)ようで、ちゃんとやると大変そうなので諦めました。たぶんこれをやりたい人は「デフォルトっぽく分かりやすい塗り分け」を求めているでしょうから、厳密さよりシンプルさを優先しました。

ちなみにデフォルトの塗り分けでは、この濃淡をグラフの本数に合わせて動的に変更しているようです。本数が少なければ濃淡を大きく変化させて、多くなると変化が小さくなっていくようです。結構複雑なことをしているんですね。

SPONSORED LINK

ソースコード

色と明るさを順に選んで設定しています。

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からグラフを塗り直しても、デフォルト色っぽい塗り分けを再現できますね!

itjo レスポンシブ 本文下

 - Excel
 - , ,