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