縦棒グラフの支店ごとに棒の色を変えるマクロ

マクロ講座 動画編 107回
マクロ講座

動画でExcel グラフのマクロ、支店ごとに棒の色を変える

グラフのマクロ、支店ごとに棒の色を変える

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

マクロ動画 グラフのマクロ、支店ごとに棒の色を変える

マクロ系列の支店ごとに色を変える

  1. 単色のグラフやテーマカラーのグラフではなく、系列の支店ごとに色を変えたいというケースです。
    支店ごとに色を決めておけば、月が変わってもグラフの色が決まっているのでとても見やすいです。

    グラフのマクロ、支店ごとに棒の色を変える1
  2. 単色のグラフと色分けされたグラフを比べれば、どちらがより見やすいか一目瞭然ですね。

    グラフのマクロ、支店ごとに棒の色を変える2
  3. 支店ごとにどの色を使うかはあらかじめ決めておきます。サンプルではA列にグラフで使う人を表示しておきました。

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

    グラフのマクロ、支店ごとに棒の色を変える4
  5. 棒グラフ一本をクリックすると全部が選択されます。

    グラフのマクロ、支店ごとに棒の色を変える5

グラフのマクロコードの書き方

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

    グラフのマクロ、支店ごとに棒の色を変える6
  2. 今回使う変数はこちらです。変数グラフは、なじみのあるgraph
    Dim graph As Chart

    グラフのマクロ、支店ごとに棒の色を変える7
  3. 他に、系列は名前が長いのでfullsc としました。fullsc 色を指定する際に、R、G、Bを使うのでLong型の変数にしました。
    Dim fullsc As SeriesCollection
    Dim r As Long, g As Long, b As Long

    グラフのマクロ、支店ごとに棒の色を変える8
  4. 初めにSheet1のChartObjects(1)をアクティブにします。
    Sheet1.ChartObjects(1).Activate
    Set graph = ActiveChart

    グラフのマクロ、支店ごとに棒の色を変える9
  5. 系列をセットします。
    Set fullsc = graph.SeriesCollection

    グラフのマクロ、支店ごとに棒の色を変える10

縦棒の色塗はFor文で回す

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

    グラフのマクロ、支店ごとに棒の色を変える11
  2. こちらは1本だけ選択した状態とそのコードです。

    グラフのマクロ、支店ごとに棒の色を変える12
  3. For文を使って1本ずつ設定していきましょう。

    グラフのマクロ、支店ごとに棒の色を変える13
  4. RGBをA列の指定セルから取得した色で設定します。
    r = Rcolor Mod 256
    g = Rcolor \ 256 Mod 256
    b = Rcolor \ 65536 Mod 256

    グラフのマクロ、支店ごとに棒の色を変える14
  5. さらに選択した系列にその色をRGBでセットすると、色が塗られます。

    グラフのマクロ、支店ごとに棒の色を変える15
  6. コードは以下のようになります。

    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
    
    ステップ実行で系列に色が塗られるのを確認しています。 グラフのマクロ、支店ごとに棒の色を変える16
  7. 結果はこのように系列の1本ごとに設定して色で塗分けられて、とても見やすいグラフになりました。

    グラフのマクロ、支店ごとに棒の色を変える17