ExcelVBAでグラフの種類やデータ範囲を自動化できるようになると、次に気になるのが「軸(Axis)」の見た目です。最大値や目盛間隔がグラフごとにバラバラだと、資料としての完成度が下がってしまいます。
この記事では、グラフの軸をVBAから操作する方法として、最大値・最小値・目盛間隔の設定、軸ラベルの書式、軸タイトルの追加、そして単位が異なる2つのデータ系列をきれいに見せる「第2軸」の設定方法まで解説します。
Axisオブジェクトの基本
Excelのグラフには、縦軸(値軸)と横軸(項目軸)があり、それぞれ Axes メソッドで取得します。
Sub GetAxisSample()
Dim cht As Chart
Set cht = ThisWorkbook.Worksheets("Sheet1").ChartObjects(1).Chart
Dim valueAxis As Axis
Set valueAxis = cht.Axes(xlValue)
Dim categoryAxis As Axis
Set categoryAxis = cht.Axes(xlCategory)
MsgBox "縦軸の最大値:" & valueAxis.MaximumScale
End Sub
Axes(xlValue) が縦軸(値軸)、Axes(xlCategory) が横軸(項目軸)を表します。取得した Axis オブジェクトに対してプロパティを設定することで、軸の見た目を細かく制御できます。
最大値・最小値・目盛間隔を固定する
データが更新されるたびに軸のスケールが変わってしまうと、複数のグラフを見比べにくくなります。MaximumScale・MinimumScale・MajorUnit を指定して固定しましょう。
Sub SetAxisScale()
Dim cht As Chart
Set cht = ThisWorkbook.Worksheets("Sheet1").ChartObjects(1).Chart
With cht.Axes(xlValue)
.MinimumScale = 0
.MaximumScale = 1000
.MajorUnit = 100
.MinorUnit = 20
End With
End Sub
MinimumScale と MaximumScale で表示範囲を固定し、MajorUnit で主目盛の間隔、MinorUnit で補助目盛の間隔を指定します。自動スケールに戻したい場合は、各プロパティに値を設定するのではなく MinimumScaleIsAuto = True のように対応する IsAuto プロパティを使います。
Sub ResetAxisAuto()
Dim cht As Chart
Set cht = ThisWorkbook.Worksheets("Sheet1").ChartObjects(1).Chart
With cht.Axes(xlValue)
.MinimumScaleIsAuto = True
.MaximumScaleIsAuto = True
.MajorUnitIsAuto = True
End With
End Sub
軸ラベルの書式(表示形式・フォント)を設定する
軸の数値表示形式は TickLabels.NumberFormat で、フォントは TickLabels.Font で設定します。
Sub SetAxisLabelFormat()
Dim cht As Chart
Set cht = ThisWorkbook.Worksheets("Sheet1").ChartObjects(1).Chart
With cht.Axes(xlValue)
.TickLabels.NumberFormat = "#,##0円"
.TickLabels.Font.Size = 9
.TickLabels.Font.Color = RGB(80, 80, 80)
End With
With cht.Axes(xlCategory)
.TickLabels.Orientation = 45
End With
End Sub
横軸のラベルが長くて重なってしまう場合は、TickLabels.Orientation で文字を斜めに傾けると読みやすくなります。
軸タイトルを追加する
軸に単位や項目名を明示したいときは、HasTitle を True にしてから AxisTitle.Text に文字列を設定します。
Sub SetAxisTitle()
Dim cht As Chart
Set cht = ThisWorkbook.Worksheets("Sheet1").ChartObjects(1).Chart
With cht.Axes(xlValue)
.HasTitle = True
.AxisTitle.Text = "売上金額(円)"
.AxisTitle.Font.Size = 10
End With
With cht.Axes(xlCategory)
.HasTitle = True
.AxisTitle.Text = "月"
End With
End Sub
HasTitle = True を先に設定しないと AxisTitle オブジェクトが存在せず実行時エラーになるため、順番に注意してください。
単位の異なる系列を第2軸に表示する
「売上金額」と「達成率(%)」のように単位が大きく異なる系列を同じグラフに並べると、片方のグラフがつぶれて見えなくなります。こうした場合は、系列を第2軸に割り当てます。
Sub SetSecondaryAxis()
Dim cht As Chart
Set cht = ThisWorkbook.Worksheets("Sheet1").ChartObjects(1).Chart
' 2番目の系列(達成率など)を第2軸に割り当てる
cht.SeriesCollection(2).AxisGroup = xlSecondary
With cht.Axes(xlValue, xlSecondary)
.MinimumScale = 0
.MaximumScale = 1
.TickLabels.NumberFormat = "0%"
.HasTitle = True
.AxisTitle.Text = "達成率"
End With
End Sub
SeriesCollection(2).AxisGroup = xlSecondary を実行すると、その系列専用の第2軸(xlSecondary)が自動的に作成されます。第2軸に対してプロパティを設定する際は、Axes(xlValue, xlSecondary) のように第2引数で軸グループを指定する点がポイントです。
まとめ
グラフの軸をVBAで制御できるようになると、レポートやダッシュボードの見た目を統一しやすくなります。
- 縦軸は
Axes(xlValue)、横軸はAxes(xlCategory)で取得する MaximumScale・MinimumScale・MajorUnitでスケールを固定し、IsAuto系プロパティで自動に戻せるTickLabels.NumberFormatで表示形式、TickLabels.Orientationでラベルの角度を調整できるAxisTitleを使う前に必ずHasTitle = Trueを設定する- 単位の異なる系列は
AxisGroup = xlSecondaryで第2軸に割り当て、Axes(xlValue, xlSecondary)で個別に書式設定する
グラフ生成マクロに軸の書式設定を組み込んでおけば、毎回手作業で調整する手間がなくなります。ぜひ活用してみてください。


コメント