VBAでPowerPoint資料を自動作成する際、グラフなどを「常にスライドの決まった位置に、決まったサイズで」貼り付けたいと思うことは多いでしょう。座標を数値で指定するのは微調整が大変です。
この記事では、より直感的で高精度な方法として、PowerPointのテンプレートにあらかじめ配置した「枠(プレースホルダ図形)」を基準にして、その図形にピッタリ合うようにExcelのグラフを貼り付けるという、プロフェッショナルなテクニックを解説します。
準備:テンプレートとオブジェクトの命名
このマクロを成功させるには、事前の準備が非常に重要です。
- PowerPointテンプレートの準備
- グラフを配置したいスライドに、四角形などの簡単な図形を挿入します。その図形を、最終的にグラフを配置したい正確な位置とサイズに調整します。
- 次に、その図形に名前を付けます。図形を選択し、
ホーム
タブ >描画
グループの配置
>オブジェクトの選択と表示
をクリックします。右側に表示されるパネルで、図形の名前を分かりやすいもの(例:ChartPlaceholder
)に変更します。この名前がVBAコードから図形を指定するキーになります。
- Excelグラフの準備
- Excel側でも、貼り付けたいグラフを選択し、グラフツールの書式タブなどで名前(例:
MonthlySalesChart
)を付けておくと、VBAでより確実にグラフを指定できます。
- Excel側でも、貼り付けたいグラフを選択し、グラフツールの書式タブなどで名前(例:
- 参照設定
- VBEの
ツール
>参照設定
から**「Microsoft PowerPoint XX.0 Object Library」**にチェックを入れてください。
- VBEの
完成した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で精密に制御したい場合、**「名前付きプレースホルダ図形」**を利用する方法が非常に有効です。
- テンプレートにあらかじめ図形を配置し、名前を付けてレイアウトを視覚的に決定しておく。
- VBAでその名前付き図形をオブジェクトとして取得する。
- Excelからグラフなどを貼り付け、そのオブジェクトも変数に取得する。
- 貼り付けたオブジェクトの位置・サイズ情報を、プレースホルダの位置・サイズ情報で上書きする。
- 最後にプレースホルダを削除する。
この手法により、コード上で座標数値を手探りで調整する必要がなくなり、メンテナンス性に優れた美しい資料作成の自動化が実現します。