【Excel VBA】PowerPointの図形に合わせてExcelグラフを貼り付ける方法

VBAでPowerPoint資料を自動作成する際、グラフなどを「常にスライドの決まった位置に、決まったサイズで」貼り付けたいと思うことは多いでしょう。座標を数値で指定するのは微調整が大変です。

この記事では、より直感的で高精度な方法として、PowerPointのテンプレートにあらかじめ配置した「枠(プレースホルダ図形)」を基準にして、その図形にピッタリ合うようにExcelのグラフを貼り付けるという、プロフェッショナルなテクニックを解説します。


目次

準備:テンプレートとオブジェクトの命名

このマクロを成功させるには、事前の準備が非常に重要です。

  1. PowerPointテンプレートの準備
    • グラフを配置したいスライドに、四角形などの簡単な図形を挿入します。その図形を、最終的にグラフを配置したい正確な位置とサイズに調整します。
    • 次に、その図形に名前を付けます。図形を選択し、ホームタブ > 描画グループの配置 > オブジェクトの選択と表示 をクリックします。右側に表示されるパネルで、図形の名前を分かりやすいもの(例: ChartPlaceholder)に変更します。この名前がVBAコードから図形を指定するキーになります。
  2. Excelグラフの準備
    • Excel側でも、貼り付けたいグラフを選択し、グラフツールの書式タブなどで名前(例: MonthlySalesChart)を付けておくと、VBAでより確実にグラフを指定できます。
  3. 参照設定
    • VBEの ツール > 参照設定 から**「Microsoft PowerPoint XX.0 Object Library」**にチェックを入れてください。

完成したVBAコード

以下が、PowerPoint上の名前付き図形に合わせてグラフを貼り付けるVBAコードです。

'参照設定: Microsoft PowerPoint XX.0 Object Library
Sub PasteChartToPlaceholderShape()

    ' 変数を宣言します
    Dim ppApp As PowerPoint.Application
    Dim ppPres As PowerPoint.Presentation
    Dim targetSlide As PowerPoint.Slide
    Dim placeholderShape As PowerPoint.Shape
    Dim pastedChart As PowerPoint.Shape
    Dim sourceChart As ChartObject

    ' --- 1. PowerPointを起動し、テンプレートと操作対象オブジェクトを設定 ---
    Set ppApp = New PowerPoint.Application
    ppApp.Visible = True

    ' テンプレートのプレゼンテーションを開く
    Set ppPres = ppApp.Presentations.Open(ThisWorkbook.Path & "\Report_Template.pptx")
    ' 1枚目のスライドを操作対象に設定
    Set targetSlide = ppPres.Slides(1)
    ' スライド上の名前付き図形(プレースホルダ)を取得
    Set placeholderShape = targetSlide.Shapes("ChartPlaceholder")
    ' コピー元のExcelグラフを取得
    Set sourceChart = ThisWorkbook.Worksheets("Sheet1").ChartObjects("MonthlySalesChart")

    ' --- 2. Excelグラフをコピーし、PowerPointに貼り付け ---
    sourceChart.CopyPicture
    ' Pasteメソッドは貼り付けたShapeオブジェクトを返す
    Set pastedChart = targetSlide.Shapes.Paste

    ' --- 3. 貼り付けたグラフの位置とサイズを調整 ---
    With pastedChart
        .Left = placeholderShape.Left
        .Top = placeholderShape.Top
        .Width = placeholderShape.Width
        .Height = placeholderShape.Height
    End With

    ' --- 4. 役目を終えたプレースホルダ図形を削除 ---
    placeholderShape.Delete

    ' --- 5. 保存して終了 ---
    ppPres.Save
    ppPres.Close
    ppApp.Quit

    ' --- 6. オブジェクトを解放 ---
    Set pastedChart = Nothing
    Set placeholderShape = Nothing
    Set targetSlide = Nothing
    Set ppPres = Nothing
    Set ppApp = Nothing

    MsgBox "PowerPointへのグラフの配置が完了しました。"

End Sub

コードのポイント解説

① プレースホルダ図形の取得

Set placeholderShape = targetSlide.Shapes("ChartPlaceholder")

Slides(1)でスライドを指定した後、.Shapes("図形の名前")と記述することで、名前によって特定の図形オブジェクトを取得できます。これが、レイアウトの基準となるプレースホルダをVBAで扱うための鍵です。

② グラフの貼り付けとオブジェクト取得

sourceChart.CopyPicture
Set pastedChart = targetSlide.Shapes.Paste

Excelグラフを画像としてコピーし、.Shapes.Pasteでスライドに貼り付けます。重要なのは、Pasteメソッドが貼り付けられた新しい図形(グラフ)のオブジェクトを返すことです。これをpastedChart変数に格納することで、貼り付けたばかりのグラフをVBAで操作できるようになります。

③ 位置とサイズをプレースホルダに合わせる

With pastedChart
    .Left = placeholderShape.Left
    .Top = placeholderShape.Top
    .Width = placeholderShape.Width
    .Height = placeholderShape.Height
End With

ここがこのテクニックの核心部です。貼り付けたグラフ(pastedChart)の**.Left.Widthといった位置・サイズに関する各プロパティに、基準となるプレースホルダ図形(placeholderShape)の同じプロパティの値を代入**しています。これにより、グラフがプレースホルダと寸分違わぬレイアウトに自動で調整されます。

④ プレースホルダ図形の削除

placeholderShape.Delete

貼り付けたグラフのレイアウト調整が完了すれば、基準として使ったプレースホルダ図形はもう不要です。.Deleteメソッドで削除することで、最終的なスライドをクリーンな状態に仕上げます。


まとめ

PowerPoint資料のレイアウトをVBAで精密に制御したい場合、**「名前付きプレースホルダ図形」**を利用する方法が非常に有効です。

  1. テンプレートにあらかじめ図形を配置し、名前を付けてレイアウトを視覚的に決定しておく。
  2. VBAでその名前付き図形をオブジェクトとして取得する。
  3. Excelからグラフなどを貼り付け、そのオブジェクトも変数に取得する。
  4. 貼り付けたオブジェクトの位置・サイズ情報を、プレースホルダの位置・サイズ情報で上書きする。
  5. 最後にプレースホルダを削除する。

この手法により、コード上で座標数値を手探りで調整する必要がなくなり、メンテナンス性に優れた美しい資料作成の自動化が実現します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次