【ExcelVBA・マクロ】グラフの軸(Axis)をVBAでカスタマイズする方法|最大値・目盛間隔・第2軸の設定【コピペOK】

ExcelVBA

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) で個別に書式設定する

グラフ生成マクロに軸の書式設定を組み込んでおけば、毎回手作業で調整する手間がなくなります。ぜひ活用してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

タイトルとURLをコピーしました