VBA100本ノック 37本目:グラフの色設定
こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。
上記リンク先から、問題文を転載。
今回は、
- グラフが一つしかない ⇒ 一つ目のグラフで決め打ち
- 最大値と最小値を編集 ⇒ 最大値、最小値で決め打ち
ということで、決め打ちが多い分だけコードが短くなった。
しかし、普段操作しない箇所についてのコードが多数あって、今回はいつにも
増して勉強になった。
ということで、作成したコードがこちら。
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
↓ 結果がこちら。
※冒頭リンク先の解答例および解説も、ぜひご一読ください。
参考まで。