[エクセルVBA] グラフを2本ずつ同色に塗り分ける方法

      2018/04/07

graph-2pair-color

グラフを2本ずつペアにして同じ色にする方法です。

色は自分で設定することになるので、デフォルトの塗り分けを再現するようにしました。

SPONSORED LINK

基本方針

2本ずつペアにして、色を設定します。

元々設定されている色をそのまま2本ずつにするのは難しい(というか面倒)ので、新たに色を指定することにします。新たな色といってもRGBを指定するわけではなく、テーマカラーを使った色指定にします。もちろんRGBで指定することも可能ですけどね。

  1. グラフをアクティブにする。
  2. 色を指定したい本数の線に対して、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本ずつ同じ色で塗り分けられます。

graph-2pair-color

色変更の左辺の「Line」を「Fill」に変更すれば、棒グラフや散布図(点)などの他のグラフにも応用できます。

SPONSORED LINK

多色循環

濃淡の変化も含めて、もっと多くの色で塗り分ける方法です。

ここでは濃淡を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

graph-2pair-18colors

BrightnessList をもっとたくさん用意すればもっと多色にもできますが、あまり多くしても色の変化が微妙ですし、塗り分ける意味も無くなってくると思います。

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

まとめ

こういう塗り分けを手作業でやっていると面倒ですよね。ちゃちゃっとプログラムにしちゃいましょう。

itjo レスポンシブ 本文下

 - Excel
 - , ,