動画でExcel グラフのマクロ、支店ごとに棒の色を変える
動画版「マクロ講座」です。
サンプルのグラフはブルーの単色のグラフです。
単色のグラフをあるいは、テーマカラーの色のグラフでもいいんですが、系列の支店ごとに色を変えたいというような場合がありますね。
あるいは他の支店は同じに色して該当支店だけ色を変えて分かりやすくしたいというようなこともあるかと思います。
あるいは他社製品と自社製品を比べるときに自社製品だけ色を付けたいんだというようなこともあるかもしれません。
そういう時に一つずつ色を変えていたのでは大変ですから、これをマクロで実行しようということです。
(サンプルファイルは、こちらです。 グラフのマクロ、支店ごとに棒の色を変える、サンプル107回)
単色のグラフやテーマカラーのグラフではなく、系列の支店ごとに色を変えたいというケースです。
支店ごとに色を決めておけば、月が変わってもグラフの色が決まっているのでとても見やすいです。

単色のグラフと色分けされたグラフを比べれば、どちらがより見やすいか一目瞭然ですね。

支店ごとにどの色を使うかはあらかじめ決めておきます。サンプルではA列にグラフで使う人を表示しておきました。

VBAコードの方ではグラフのことをチャートオブジェクトと言います。チャートを変更したりするには、ChartObjectsを選択します。
Sheet1.ChartObjects(1).Activate

棒グラフ一本をクリックすると全部が選択されます。

この縦棒グラフの一本一本はデータ系列で、それらは集合体です。 "Chart.フルシリーズコレクション"または"チャートドットシリーズコレクションと言います。

今回使う変数はこちらです。変数グラフは、なじみのあるgraph
Dim graph As Chart

他に、系列は名前が長いのでfullsc としました。fullsc 色を指定する際に、R、G、Bを使うのでLong型の変数にしました。
Dim fullsc As SeriesCollection
Dim r As Long, g As Long, b As Long

初めにSheet1のChartObjects(1)をアクティブにします。
Sheet1.ChartObjects(1).Activate
Set graph = ActiveChart

系列をセットします。
Set fullsc = graph.SeriesCollection

Excelのチャートに戻って確認しますと、
ActiveChart.FullSeriesCollection(1).Select
の状態がこの画像の状態です。

こちらは1本だけ選択した状態とそのコードです。

For文を使って1本ずつ設定していきましょう。

RGBをA列の指定セルから取得した色で設定します。
r = Rcolor Mod 256
g = Rcolor \ 256 Mod 256
b = Rcolor \ 65536 Mod 256

さらに選択した系列にその色をRGBでセットすると、色が塗られます。

コードは以下のようになります。
Option Explicit
Dim graph As Chart, i As Long, j As Long, Rcolor As Long
Dim fullsc As SeriesCollection
Dim r As Long, g As Long, b As Long '色のRGB値
Sub ChartColorChange2()
Sheet1.ChartObjects(1).Activate
Set graph = ActiveChart
Set fullsc = graph.SeriesCollection
For j = 1 To fullsc.Count
For i = 1 To fullsc(1).Points.Count
fullsc(j).Points(i).Select
Rcolor = Sheet1.Cells(i + 2, 1).Interior.Color
r = Rcolor Mod 256
g = Rcolor \ 256 Mod 256
b = Rcolor \ 65536 Mod 256
With Selection.Format.Fill
.ForeColor.RGB = RGB(r, g, b)
End With
Next i
Next j
End Sub
ステップ実行で系列に色が塗られるのを確認しています。

結果はこのように系列の1本ごとに設定して色で塗分けられて、とても見やすいグラフになりました。
