VBA100本ノック 37本目:グラフの色設定

こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。

上記リンク先から、問題文を転載。

今回は、

  1. グラフが一つしかない ⇒ 一つ目のグラフで決め打ち
  2. 最大値と最小値を編集 ⇒ 最大値、最小値で決め打ち

ということで、決め打ちが多い分だけコードが短くなった。

しかし、普段操作しない箇所についてのコードが多数あって、今回はいつにも
増して勉強になった。

ということで、作成したコードがこちら。

Enum ItemIndex
    eMin
    eMax
End Enum
Sub VBA_100Knock_37()
    ' 最小・最大の棒の色。
    Dim Color(ItemIndex.eMin To ItemIndex.eMax) As Long
        Color(ItemIndex.eMin) = rgbRed
        Color(ItemIndex.eMax) = rgbGreen
    Dim ItemNum(ItemIndex.eMin To ItemIndex.eMax) As Long
    ' 系列の値が記された範囲。
    Dim DataRange As Range
    Set DataRange = Range("B2:B11")
    ' 何度もWorksheetFunctionsと記述すると長くなるので、wfにセット。
    Dim wf As WorksheetFunction: Set wf = WorksheetFunction
        ' 最小値が系列の何番目かを求める。最大値も同様。
        ItemNum(ItemIndex.eMin) = wf.Match(wf.Min(DataRange), DataRange, 0)
        ItemNum(ItemIndex.eMax) = wf.Match(wf.Max(DataRange), DataRange, 0)
    
    Dim i As Long
    Dim Chart As Excel.Chart
    ' グラフは今回一つしかない。
    Set Chart = ActiveSheet.ChartObjects(1).Chart
        For i = ItemIndex.eMin To ItemIndex.eMax
            ' グラフの一つ目の系列(今回は一つしかない)の、最小・最大
            ' 各ポイントについて。
            With Chart.FullSeriesCollection(1).Points(ItemNum(i))
                ' 棒グラフ着色。
                .Format.Fill.ForeColor.RGB = Color(i)
                ' データラベル表示。
                .HasDataLabel = True
                ' 表示するのは値。
                .DataLabel.ShowValue = True
                ' 表示する場所は棒グラフの上。
                .DataLabel.Position = xlLabelPositionOutsideEnd
            End With
        Next
End Sub

↓ 結果がこちら。

※冒頭リンク先の解答例および解説も、ぜひご一読ください。

参考まで。