エクセルVBAでグラフの軸の最大値・最小値や軸タイトルを設定する方法


axis

photo credit: “Stròlic Furlàn” – Davide Gabino Stazione di Udine via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAでグラフとPowerPointを操作する方法についてシリーズでお伝えしています。

前回はこちらの記事でした。

エクセルVBAでグラフタイトルを変更する方法とChartTitleについて
エクセルVBAでグラフとPowerPointを操作する方法についてお伝えしています。今回は、グラフのデータ範囲とともにChartTitleのTextを使って、タイトルも変更しながら貼り付ける方法です。

エクセルでグラフのデータ範囲とタイトルを変化させながら、生成したグラフを都度PowerPointスライドに次々に貼り付けていくというプログラムを紹介しました。

大量のグラフを作成してPowerPointに貼り付けるときに便利です。

さて今回は、エクセルVBAでグラフの軸の最大値、最小値や、軸タイトルを変更する方法についてお伝えします。

スポンサーリンク

前回のおさらい

では、前回までのおさらいをしておきます。

元となるデータと、テンプレートとして用いるグラフ「Chart1」は以下のようにエクセルシート「Sheet2」に作成をしています。

エクセルVBAでグラフを作るためのお題シート

このグラフのデータ範囲を一行ずつ変更しながら、その都度PowerPointスライドに貼り付けていくプログラムがこちらです。

Sub グラフ範囲を変更しながらPowerPointに貼り付ける()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet2")

Dim cht As chart
Set cht = ws.ChartObjects("Chart 1").chart
cht.HasTitle = True 'グラフタイトルを表示

Dim ppApp As New PowerPoint.Application
ppApp.Visible = True

Dim ppPrs As PowerPoint.Presentation
Set ppPrs = ppApp.Presentations.Open(ThisWorkbook.Path & "\ひな形.pptx")

Dim countSld As Long  'スライド数を格納
Dim i As Long
i = 3

Do While ws.Cells(i, 1).Value <> ""

    With cht
        .SetSourceData Union(ws.Range("C1:U2"), ws.Range("C3:U3").Offset(i - 3, 0)) 'データ範囲を変更
        .ChartTitle.Text = ws.Cells(i, 2).Value & "の人口推移(千人)" 'グラフタイトルを変更
        .Refresh
    End With

    countSld = ppPrs.Slides.count
    ppPrs.Slides(1).Duplicate.MoveTo (countSld + 1) '1ページ目を複製して最終ページへ移動

    ws.ChartObjects("Chart 1").chart.CopyPicture xlScreen, xlPicture 'グラフを画像としてコピー
    ppPrs.Slides(countSld + 1).Shapes.Paste 'グラフ画像をペースト
    ppPrs.Slides(countSld + 1).Shapes(3).TextFrame.TextRange.Text = ws.Cells(i, 2).Value 'スライドタイトルに都道府県名

    i = i + 1
Loop

'ppApp.Quit
'Set ppApp = Nothing

End Sub

実行をすると、以下の図のようにPowerPointのスライドにグラフが貼り付けられていきます。

エクセルVBAでPowerPointに貼り付けるグラフのタイトルを設定

今回のお題:軸の最大値を一定にしたい

これで都道府県ごとの人口推移のグラフをPowerPonitのスライド上に一気に作成できるのですが、都道府県の比較という視点では少し問題があります。

例えば、埼玉県の人口推移に関するグラフのスライドはこちら。

エクセルVBAで貼り付けたグラフの軸の最大値(埼玉県)

次に、東京都の人口推移に関するグラフのスライドはこちらです。

エクセルVBAで貼り付けたグラフの軸の最大値(東京都)

並べて縦棒の長さだけを見ると、平成22年のあたりは同じ値に見えてしまいますが、軸の値を見れば全然違うということがわかります。埼玉県は、約700万人くらい、東京都は1,300万人くらいですね。

ご存知の通り、エクセルでグラフを作成をすると軸の最大値や最小値は自動で設定されます。ですから、グラフ同士を見比べるというニーズがありそうであれば、軸の最大値を揃えたいということになります。

また、軸の数値が何を表しているか、またその単位なども表示する「軸タイトル」も欲しいですよね。

グラフの軸の設定を変更する

では、エクセルVBAでグラフの軸の設定を変更する方法について紹介していきます。

グラフの軸を操作する場合は、Chartオブジェクト配下のAxisオブジェクトというものを操作します。オブジェクトの階層としては

Sheet
┗ChartObject:シート上のグラフの外観や大きさなどをつかさどる
 ┗Chart:グラフそのもの
  ┗Axis:グラフの軸

となります。ちょっとスペルが違うので別モノに見えてしまいますが、AxisオブジェクトはAxesコレクションのメンバーです。

Axisオブジェクトの取得方法

ちょっとややこしいのですが、Axisオブジェクトを取得するにはAxesコレクションを使いまして

Chartオブジェクト.Axes(type,group)

とします。

パラメータですが、typeには以下のいずれかを指定します。

  • xlValue:値(y軸)
  • xlCategory:項目(x軸)
  • xlSeriesAxis:データ系列

groupは以下を指定しますが、省略可能です。

  • xlPrimary:主軸(下/左側)※既定値
  • xlSecondary:第2軸(上/右側)

例えば、Chartオブジェクトchtのy軸(値軸)を操作したい場合は

With cht.Axes(xlValue)
     '処理
End With

とします。

グラフの軸の最大値と最小値を変更する

Axisオブジェクトにはたくさんのプロパティがあるのですが、いくつかを紹介していきます。

まず今回目的とする、グラフの軸の最大値および最小値の設定ですが、それぞれMaximumScale、MinimumScaleプロパティを使います。

Chartオブジェクト.Axes(type,group).MaximumScale = 値
Chartオブジェクト.Axes(type,group).MinimumScale = 値

今回のプログラムでグラフのy軸の最大値を14000に設定したい場合は、7行目の部分を

With cht
    .HasTitle = True 'グラフタイトルを表示
    .Axes(xlValue).MaximumScale = 14000 '最大値を14000に設定
End With

と置き換えればOKですね。

グラフの軸タイトルを設定する

では、もう一例。次はグラフの軸タイトルを設定してみましょう。その際は、AxisTitleオブジェクトのCaptionプロパティを使います。

Chartオブジェクト.Axes(type,group).AxisTitle.Caption = 軸タイトル

ただし、軸タイトルが表示されていない、つまりAxisTitleオブジェクトが存在していないときはエラーになってしまいますので、先にAxisオブジェクトに対するHasTitleメソッドで軸タイトルを表示しておく必要があります。

Chartオブジェクト.Axes(type,group).HasTitle = True または False

Trueにすれば表示となります。ここは前回お伝えした、グラフのタイトルつまりChartオブジェクトのHasTitleプロパティでChartTitleオブジェクトを表示しておくというのと同様ですね。

例えば、今回のプログラムでグラフの値軸、項目軸のそれぞれのタイトル軸を表示してCaptionを設定する場合は、前述のWithの部分を

With cht
    .HasTitle = True 'グラフタイトルを表示
    With .Axes(xlValue) 'y軸の設定
        .MaximumScale = 14000 '最大値を14000に設定
        .HasTitle = True '
        .AxisTitle.Caption = "人口(千人)"
    End With
    With .Axes(xlCategory) 'x軸の設定
        .HasTitle = True '
        .AxisTitle.Caption = "年号"
    End With
End With

とすればOKですね。

実行結果

上記、グラフの軸に関する設定をした上でプログラムを実行してみますと

エクセルVBAでPowerPointに貼り付けたグラフに軸の設定をした

このように全てのスライドのグラフについて、軸の最大値と軸タイトルが設定されます。

まとめ

以上、エクセルVBAでグラフの軸の設定をする方法についてお伝えしました。Axisオブジェクトの取得の方法はちょっと特殊ですが、いつもAxesコレクションの括弧つきで値軸とか項目軸とかを指定するんだと覚えておいてください。

今回は、軸の最大値と最小値、軸のタイトルについてお伝えしましたが、Axisオブジェクトにはたくさんのプロパティがありますので、機会があれば調べてみてくださいね。

なお、お気づきかも知れませんが、今回の軸の設定ですが、エクセルシート上のグラフに対して設定をした上でVBAを実行すれば、わざわざVBAプログラム内に仕込む必要はありませんので、動的に変更したいときなどに絶賛ご活用いただければと思います。

さて、次回ですが、エクセルシート上の種類が異なる複数のグラフを一気にPowerPointに貼っていく方法について、別シリーズとしてお伝えしたいと思います。

どうぞお楽しみに!

連載目次:エクセルVBAでグラフとPowerPointを操作する

エクセルで様々な集計や分析をした結果の表やグラフを、最終的にPowerPointに貼り付け…という作業は結構多いですよね。1つ2つなら良いですが、大量にあった場合は大変です。そんな時にはVBAで自動化をしてしまいましょう!
  1. エクセルVBAでPowerPointを操作するための準備と最も簡単なプログラム
  2. エクセルVBAでPowerPointのプレゼンテーションを開く方法・スライドを取得する方法
  3. エクセルVBAでPowerPointスライド上のシェイプ一覧を取得する
  4. エクセルVBAでPowerPointの特定のシェイプのインデックス番号を調べる方法
  5. エクセルVBAでPowerPointのテキストボックスに文字を入力する
  6. エクセルVBAでPowerPointでタイトルを変更しながらスライドを大量に生成する
  7. 初心者でも分かる!エクセルVBAでグラフを操作し取り扱うための超基本の第一歩
  8. エクセルVBAでグラフの元となるデータ範囲を次々と変更するプログラム
  9. 簡単!エクセルVBAでシート上のグラフをコピーしてPowerPointにペーストする
  10. エクセルVBAでグラフのデータ範囲を変更しながらPowerPointに連続して貼り付ける
  11. エクセルVBAでグラフタイトルを変更する方法とChartTitleについて
  12. エクセルVBAでグラフの軸の最大値・最小値や軸タイトルを設定する方法

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