[エクセルVBA] グラフを2本ずつ同色に塗り分ける方法
2018/04/07
グラフを2本ずつペアにして同じ色にする方法です。
色は自分で設定することになるので、デフォルトの塗り分けを再現するようにしました。
基本方針
2本ずつペアにして、色を設定します。
元々設定されている色をそのまま2本ずつにするのは難しい(というか面倒)ので、新たに色を指定することにします。新たな色といってもRGBを指定するわけではなく、テーマカラーを使った色指定にします。もちろんRGBで指定することも可能ですけどね。
- グラフをアクティブにする。
- 色を指定したい本数の線に対して、2本ずつ同じ色を設定する。
という手順になります。ここでは散布図(線)を例にします。折れ線グラフも同じコードが使えます。
6色循環
テーマカラーは基本色が6色あって、あとはその濃淡で多数の色を表現しています。エクセルで作るグラフのデフォルトは、この6色を濃淡を変えながら塗りわけています。
まずは簡単に、6色を循環させる方法です。12本(6色×各色2本)までのグラフなら塗り分けられます。
Dim i As Long, ColorNum As Long ActiveSheet.ChartObjects("グラフ 1").Activate For i = 1 To 10 ColorNum = (i - 1) \ 2 ' 0,0,1,1,2,... ' 色はテーマカラー6色を循環 ActiveChart.SeriesCollection(i).Format.Line.ForeColor.ObjectThemeColor = msoThemeColorAccent1 + ColorNum Mod 6 Next i
これで2本ずつ同じ色で塗り分けられます。
色変更の左辺の「Line」を「Fill」に変更すれば、棒グラフや散布図(点)などの他のグラフにも応用できます。
多色循環
濃淡の変化も含めて、もっと多くの色で塗り分ける方法です。
ここでは濃淡を3段階用意して、18色循環で塗り分けるコードを紹介します。36本までのグラフが正しく塗り分けられますね。
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 10 ColorNum = (i - 1) \ 2 ' 色はテーマカラー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) Next i
BrightnessList をもっとたくさん用意すればもっと多色にもできますが、あまり多くしても色の変化が微妙ですし、塗り分ける意味も無くなってくると思います。
ちなみにデフォルトの塗り分けでは、この濃淡をグラフの本数に合わせて動的に変更しているようです。本数が少なければ濃淡を大きく変化させて、多くなると変化が小さくなっていくようです。
まとめ
こういう塗り分けを手作業でやっていると面倒ですよね。ちゃちゃっとプログラムにしちゃいましょう。