みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAでグラフとPowerPointを操作する方法についてお伝えしています。
前回はこちらの記事。
グラフのデータ範囲をビョンビョン変化させつつ、各グラフを都度PowerPointスライドに貼り付けていくというプログラムを紹介しました。
これを使えば、多数のグラフを使ったPowerPointスライドがボタン一つであっという間に出来上がるという寸法です。
今回は、それに付随しまして、グラフのデータ範囲だけでなく、タイトルも変更してみたいと思います。
エクセルVBAでグラフのタイトルを変更する方法です。
では、行ってみましょう。
前回のおさらい
元となるデータはこちらのエクセルシート「Sheet2」にありまして
グラフは「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
このプログラムを実行している様子がこちらですね。
さて、PowerPointのスライドタイトルにも「北海道」とか「青森県」とか入っているのですが、グラフタイトルにも「北海道の人口推移」「青森県の人口推移」などと入れていきたい、というのが今回のお題です。
ChartTitleのTextプロパティでグラフタイトルを設定する
エクセルVBAでグラフのタイトルを変更する場合は、Chartオブジェクト配下にあります、ChartTitleオブジェクトのTextプロパティを使います。
書き方ですが
とします。
エクセルの埋め込みグラフに関してはオブジェクト階層が深くてわかりづらいので整理しておきますね。
┗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プロパティを操作してグラフタイトルを表示しておきます。
Trueとするとグラフタイトルを表示、Falseで非表示となります。
まあ、今回の場合は、元のグラフにグラフタイトルを表示しておけばOKですね。
実行結果
上記プログラムを実行すると、エクセルシート上のグラフでは
このようにデータ範囲最後の沖縄県のグラフタイトルがされています。
スライドに貼り付けられたグラフを確認すると
ちゃんとそれぞれのスライドと同じ都道府県のグラフタイトルが追加されていますね。
まとめ
エクセルVBAでグラフタイトルを変更する方法についてお伝えしました。
ChartTitleオブジェクトのTextプロパティを使うだけですが、グラフに関してはオブジェクト階層が深くて混乱しがちなので、その点だけ気を付けて頂ければと思います。
HasTitleプロパティなども紹介しましたが、わざわざVBAでやらなくても、エクセル上のグラフの設定で済みますので、そちらのほうがいいでしょう。
次回ですが、続いてグラフの軸の最大値・最小値、軸タイトルなどの設定についてお伝えします。
どうぞお楽しみに!
連載目次:エクセルVBAでグラフとPowerPointを操作する
エクセルで様々な集計や分析をした結果の表やグラフを、最終的にPowerPointに貼り付け…という作業は結構多いですよね。1つ2つなら良いですが、大量にあった場合は大変です。そんな時にはVBAで自動化をしてしまいましょう!- エクセルVBAでPowerPointを操作するための準備と最も簡単なプログラム
- エクセルVBAでPowerPointのプレゼンテーションを開く方法・スライドを取得する方法
- エクセルVBAでPowerPointスライド上のシェイプ一覧を取得する
- エクセルVBAでPowerPointの特定のシェイプのインデックス番号を調べる方法
- エクセルVBAでPowerPointのテキストボックスに文字を入力する
- エクセルVBAでPowerPointでタイトルを変更しながらスライドを大量に生成する
- 初心者でも分かる!エクセルVBAでグラフを操作し取り扱うための超基本の第一歩
- エクセルVBAでグラフの元となるデータ範囲を次々と変更するプログラム
- 簡単!エクセルVBAでシート上のグラフをコピーしてPowerPointにペーストする
- エクセルVBAでグラフのデータ範囲を変更しながらPowerPointに連続して貼り付ける
- エクセルVBAでグラフタイトルを変更する方法とChartTitleについて
- エクセルVBAでグラフの軸の最大値・最小値や軸タイトルを設定する方法