HOME > 即効テクニック > Excel VBA > グラフ関連のテクニック > グラフの系列色を自動的に設定する

即効テクニック

グラフ関連のテクニック

グラフの系列色を自動的に設定する

(Excel 97/2000/2002/2003/2007)
たとえば、ワークシート上に棒グラフを作成したとします。
棒グラフの系列のうち、任意の要素だけ背景を赤色に変更してみましょう。
マクロ記録すると、次のようなコードが得られます。
(コメント部分は省略しています)

Sub Macro1()
    ActiveSheet.ChartObjects("グラフ 1").Activate
    ActiveChart.SeriesCollection(1).Select
    ActiveChart.SeriesCollection(1).Points(1).Select
    With Selection.Interior
        .ColorIndex = 3
        .Pattern = xlSolid
    End With
End Sub
グラフを選択しないで、要素を直接操作するには次のように編集します。
Sub Sample1()
    With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points(1)
        .Interior.ColorIndex = 3
        .Interior.Pattern = xlSolid
    End With
End Sub
さて、上記のSample1では、常に先頭の要素が赤く染まりますが、そうではなく「値が1000より大きい要素を自動的に赤くする」などのように、グラフの値によって自動判定させるにはどうしたらいいでしょう。 グラフの系列はSeriesCollection(1)のように特定できますし、任意の要素はSeriesCollection(1).Points(1)とPointオブジェクトで表されます。では、各要素の値はどうやって調べるのでしょう。 場所  値 東京  800 横浜  1200 神戸  900 上のようなデータから棒グラフを作成した場合、{800,1200,900}という系列の値は、SeriesCollection(1)のValuesプロパティで知ることができます。 Valuesプロパティは系列の値を配列で返しますので、配列内の数値を調べることで棒の大きさを判定して処理を分岐することが可能です。 次のコードは、系列内で1000より大きい要素だけを赤く塗りつぶします。
Sub Sample2()
    Dim tmp As Variant, I As Long
    tmp = ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Values
    For I = 1 To Ubound(tmp)
        If tmp(i) >= 1000 Then
            With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points(i)
                .Interior.ColorIndex = 3
                .Interior.Pattern = xlSolid
            End With
        End If
    Next I
End Sub
なお、折れ線グラフのマーカー色を変更するには、次のように前景色と背景色を指定します。
Sub Sample3()
    Dim tmp As Variant, I As Long
    tmp = ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Values
    For I = 1 To Ubound(tmp)
        If tmp(i) >= 1000 Then
            With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Points(i)
                .MarkerBackgroundColorIndex = 3
                .MarkerForegroundColorIndex = 3
            End With
        End If
    Next I
End Sub