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