エクセルVBAでグラフタイトルを変更する方法とChartTitleについて

stamp

photo credit: Exile on Ontario St Brian Molko via photopin (license)

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

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

前回はこちらの記事。

301 Moved Permanently

グラフのデータ範囲をビョンビョン変化させつつ、各グラフを都度PowerPointスライドに貼り付けていくというプログラムを紹介しました。

これを使えば、多数のグラフを使ったPowerPointスライドがボタン一つであっという間に出来上がるという寸法です。

今回は、それに付随しまして、グラフのデータ範囲だけでなく、タイトルも変更してみたいと思います。

エクセルVBAでグラフのタイトルを変更する方法です。

では、行ってみましょう。

スポンサーリンク

前回のおさらい

元となるデータはこちらのエクセルシート「Sheet2」にありまして

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

グラフは「Chart 1」です。

このデータ範囲を一行ずつ変更すると、グラフの表示もそれに応じて変化します。変化するたびに、PowerPointスライドのスライドを1枚新規追加して、そこにグラフを貼り付けていく、というプログラムを作りました。

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

Dim cht As chart
Set cht = ws.ChartObjects("Chart 1").chart

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))
        .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

このプログラムを実行している様子がこちらですね。

エクセルVBAで次々とグラフをPowerPointに貼り付ける

さて、PowerPointのスライドタイトルにも「北海道」とか「青森県」とか入っているのですが、グラフタイトルにも「北海道の人口推移」「青森県の人口推移」などと入れていきたい、というのが今回のお題です。

ChartTitleのTextプロパティでグラフタイトルを設定する

エクセルVBAでグラフのタイトルを変更する場合は、Chartオブジェクト配下にあります、ChartTitleオブジェクトのTextプロパティを使います。

書き方ですが

Chartオブジェクト.ChartTitle.Text = “グラフタイトル”

とします。

エクセルの埋め込みグラフに関してはオブジェクト階層が深くてわかりづらいので整理しておきますね。

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

今回は「北海道の人口推移」とグラフタイトルを設定したいので、前述のプログラムの20行目~23行目のWithの中を

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

とします。

グラフタイトルが存在しないと操作できない

ただし、ベースとなるChartオブジェクトですが、このようにChartTitleオブジェクトつまりグラフタイトル自体が存在していない場合が想定されます。

エクセルシート上のグラフにタイトルが存在していない

この場合に、ChartTitleオブジェクトを操作しようとすると

実行時エラーグラフタイトルがない

このように「このオブジェクトにはタイトルがありません。」という実行時エラーが生じます。

ですから、ChartTitleオブジェクトを操作する際は、元のグラフにグラフタイトルを表示させておくか(内容は後で変えるので適当でOKですね)

エクセルシート上のグラフにタイトルを表示する

以下のように、VBA内でChartTitleオブジェクトを操作する前に、ChartオブジェクトのHasTitleプロパティを操作してグラフタイトルを表示しておきます。

Chartオブジェクト.HasTitle = True または False

Trueとするとグラフタイトルを表示、Falseで非表示となります。

まあ、今回の場合は、元のグラフにグラフタイトルを表示しておけばOKですね。

実行結果

上記プログラムを実行すると、エクセルシート上のグラフでは

エクセルVBAでシート上のグラフタイトルを変更

このようにデータ範囲最後の沖縄県のグラフタイトルがされています。

スライドに貼り付けられたグラフを確認すると

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

ちゃんとそれぞれのスライドと同じ都道府県のグラフタイトルが追加されていますね。

まとめ

エクセルVBAでグラフタイトルを変更する方法についてお伝えしました。

ChartTitleオブジェクトのTextプロパティを使うだけですが、グラフに関してはオブジェクト階層が深くて混乱しがちなので、その点だけ気を付けて頂ければと思います。

HasTitleプロパティなども紹介しましたが、わざわざVBAでやらなくても、エクセル上のグラフの設定で済みますので、そちらのほうがいいでしょう。

次回ですが、続いてグラフの軸の最大値・最小値、軸タイトルなどの設定についてお伝えします。

エクセルVBAでグラフの軸の最大値・最小値や軸タイトルを設定する方法
エクセルVBAでグラフとPowerPointを操作する方法についてお伝えしています。今回は、グラフの軸の最大値、最小値や、軸タイトルを変更するAxisオブジェクトの使い方についてお伝えします。

どうぞお楽しみに!

連載目次:エクセル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をコピーしました