エクセルVBAでグラフのデータ範囲を変更しながらPowerPointに連続して貼り付ける

queue

photo credit: zaphad1 IMG_5249 via photopin (license)

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

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

前回は以下の記事で、エクセルVBAでエクセル上のグラフをPowerPointに貼り付ける方法をお伝えしました。

301 Moved Permanently

そして、前々回ではエクセルVBAでグラフのデータを次々と変更するプログラムを紹介しましたね。

429 Too Many Requests

そしてそして、こちらの記事。

429 Too Many Requests

PowerPointのスライドを複製していくプログラムを紹介しました。

さて、この三つを組み合わせるとどういうことができるか…?

そうです、グラフのデータ範囲を変更しながら次々にPowerPointに貼り付けていくことができるんですね。

では、早速試してみましょう!

スポンサーリンク

お題の確認とおさらい

お題となるエクセルのグラフは以前と同様こちらを使います。シート名は「Sheet2」、グラフは「Chart 1」という名前のChartObjectです。

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

PowerPointのほうですが、こちらのひな形を使います。ファイル名は「ひな形.pptx」です。

PowerPointのひな形プレゼンテーション

エクセル上のグラフ範囲を変更していくプログラムをベースに

まず、エクセル上のグラフを範囲を変更していくプログラムですが以下の通りです。

Sub グラフのデータ範囲の変更()

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet2")

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

'★ここにPowerPoint関連のオブジェクトの準備

Dim i As Long
i = 3
Do While ws.Cells(i, 1).Value <> ""

    With cht
        .SetSourceData Union(ws.Range("C1:U2"), ws.Range("C1:U1").Offset(i - 1, 0)) 'グラフの対象範囲を変更
        .Refresh 'グラフの表示を更新
    End With

 '★ここに①PowerPointスライドを複製
   '★ここに②複製したスライドにグラフをコピー&ペースト
 
    i = i + 1
Loop

End Sub

Do Whileループで対象となる行を走査しながら、SetSourceDataメソッドで対象となるグラフ範囲を変更、Refreshメソッドでグラフの表示を更新しています。

429 Too Many Requests

ベースはこのプログラムを使っていきます。

プログラム内の「★」の箇所にコメントで入れている通り

  • ①PowerPointスライドを複製
  • ②複製したスライドにグラフをコピー&ペースト

する処理を入れつつ、それらで使用するPowerPoint関連のオブジェクトや変数の準備を冒頭に挿入すればOKですね。

PowerPointスライドを複製する処理

①PowerPointスライドを複製する処理はこちら。

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

新しいメソッドがありますので解説をします。

MoveToメソッドでスライドを末尾に移動

MoveToメソッド指定の番号にスライドを移動します。

PowerPointスライドオブジェクト.MoveTo(スライド番号)

countSldにはcountプロパティで複製をする前の末尾のスライド番号ということになりますから、今回の例では複製したスライドをすぐに末尾に移動するという処理になります。

なぜ末尾に移動しているかわかりますか?

Duplicateメソッドは、デフォルトでは複製元のスライドのすぐ後に複製をします。複製元はスライド1ですから、常にスライド2の位置に複製が挿入されるという形になります。

すると、後から作られるグラフのほうが若いスライド番号に貼られるということになります。具体的には北海道のスライドが一番末尾に来て、沖縄のスライドが2枚目に来ちゃうということです。

こいつは気持ち悪い…!

ということで、MoveToメソッドで新たに作成したスライドを常に末尾に移動して、その末尾のスライドにグラフをペーストをするという処理にしているということです。

複製したスライドにグラフをコピー&ペーストする処理

②複製したスライドにグラフをコピー&ペーストはこちらです。

    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 'スライドタイトルに都道府県名

グラフのコピー&ペーストは前回お伝えした通りですね。

301 Moved Permanently

3行目ですが、わかりやすさのためにスライドのタイトルに都道府県名を入れています。

グラフ範囲を変更しながらPowerPointに貼り付けていくプログラム

以上を踏まえて、プログラムとしてまとめますと、こちらのようになります。

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に貼り付ける

最後まで実行していませんが、スライドが追加されながら、それぞれの都道府県のグラフがペーストされているのがわかると思います。

まとめ

以上、エクセルVBAでグラフのデータ範囲を変更しながらPowerPointに連続して貼り付ける方法について紹介しました。

もう、これができちゃうと、コピペでスライド作るのがバカバカしくなっちゃいます…ね。

さて、次回ですがグラフのデータ範囲だけでなく、グラフタイトルも変更しながら貼り付けていきたいと思います。

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

どうぞお楽しみに!

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