【入門編】【中級者】複数のプレゼンテーションを結合する際、デザインマスターの競合によるレイアウト崩れを防ぐため、事前にテンプレートを統一してからマージする自動化スクリプト – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは。自動化の深淵へようこそ。

「複数のPPTを結合したら、レイアウトが崩壊して地獄絵図になった」――。
これはVBAを扱う者なら誰もが一度は通る洗練の儀式です。原因は明白。「異なるマスター(設計図)を持つスライドを、無理やり一つの場所に押し込んでいるから」です。

今日は、力技で解決するのではなく、「マスターの血統を統一してからマージする」という、アーキテクトとしての作法を伝授します。ここを理解すれば、あなたの自動化スキルは間違いなく一段階上のステージへ到達します。

—

1. なぜレイアウトは崩れるのか?

PowerPointのマスターは、いわば「家系図」です。
Aさんのファイルは「標準マスター」、Bさんのファイルは「独自デザインマスター」。この二つを結合すると、PowerPointは「どっちの家系図に従えばいいの?」と混乱し、スライド上のオブジェクトが迷子になります。

解決策はシンプルです。
1. 結合先となる「テンプレート(マスター)」を確定させる。
2. 結合したい全ファイルを、そのテンプレートで強制的に「上書き(適用)」する。
3. その上で、全スライドを一つの器に流し込む。

これだけで、デザイン崩壊の9割は防げます。

—

2. 破壊的な美学:マスター統一&結合スクリプト

このコードは、指定したフォルダ内の全PPTXを、ターゲットとなるテンプレートに合わせて変換・統合します。

Option Explicit

‘ 伝説のアーキテクトによる、堅牢なプレゼン統合メソッド
Sub MergePresentationsWithMasterSync()
Dim targetTemplatePath As String
Dim sourceFolder As String
Dim targetPres As Presentation
Dim sourcePres As Presentation
Dim fileName As String

‘ 1. 設定:統合先のテンプレートと、素材が入ったフォルダ
targetTemplatePath = “C:\Templates\Master.pptx”
sourceFolder = “C:\TargetFiles\”

‘ 2. 統合用の新規プレゼンを作成
Set targetPres = Presentations.Open(targetTemplatePath)
fileName = Dir(sourceFolder & “.pptx”)

Do While fileName <> “”
‘ 3. ファイルを開く
Set sourcePres = Presentations.Open(sourceFolder & fileName, WithWindow:=msoFalse)

‘ 4. マスターの統一(ここが生命線!)
‘ 各スライドにマスターを再適用することで、デザインの衝突を回避
ApplyMasterToAllSlides sourcePres, targetTemplatePath

‘ 5. 全スライドをターゲットへコピー
sourcePres.Slides.Range.Copy
targetPres.Slides.Paste

sourcePres.Close
fileName = Dir()
Loop

MsgBox “統合完了!マスター統一による美しきマージが成功しました。”, vbInformation
End Sub

‘ マスターを強制的に差し替える魔法の関数
Sub ApplyMasterToAllSlides(pres As Presentation, templatePath As String)
Dim sld As Slide
Dim customLayout As CustomLayout

‘ テンプレートからマスターをインポート
pres.ApplyTemplate templatePath

‘ 念のため、全てのスライドのレイアウトを再設定する
For Each sld In pres.Slides
‘ マスターの1番目のレイアウトを強制適用
sld.CustomLayout = pres.SlideMaster.CustomLayouts(1)
Next sld
End Sub

—

3. このコードの「設計意図」を読み解く

このスクリプトには、初心者が陥りがちな罠を回避する知恵が詰まっています。

① `WithWindow:=msoFalse` の魔法

`Presentations.Open` でファイルを開く際、この引数を忘れると画面がチカチカと点滅し、処理速度が劇的に低下します。バックグラウンドで処理させるのが、プロの自動化です。

② `ApplyTemplate` による血統変更

これが今回のキモです。`ApplyTemplate` を実行することで、スライドが持っている古いマスターの呪縛を解き、新しいマスターのルールに無理やり従わせます。

③ `CustomLayout` の再設定

`ApplyTemplate` だけでは、個別のスライドが古いレイアウトを記憶している場合があります。`sld.CustomLayout = …` と記述することで、強制的に新しいマスターの型にはめ込んでいます。

—

4. 陥りやすいエラーと対策

  • 「そんなレイアウトありません」エラー:

ターゲットのテンプレートに存在する「レイアウトのインデックス(番号)」と、元ファイルのレイアウトが一致しない時に起こります。基本は `CustomLayouts(1)`(表紙)や `(2)`(本文)を使いつつ、必要に応じてレイアウト名を指定する手法に切り替えてください。

  • 画像がずれる問題:

マスターを統一しても、画像やテキストボックスが絶対座標で配置されているとズレます。こればかりは「プレースホルダー(テキストボックスの枠)」を意識して資料を作るという、運用側の教育も必要です。ツールは魔法ではありません。設計が9割です。

—

最後に:自動化とは「敬意」である

自動化とは、単に作業を短縮することではありません。次にこのファイルを触る人、あるいは半年後の自分が「何が起きたか」を理解できるようにコードを書くこと。それがプロフェッショナルです。

まずはこのスクリプトを動かしてみてください。レイアウトがピタリと揃った瞬間の快感こそが、VBAエンジニアとしての喜びです。

さあ、次のステージへ行きましょう。何かあれば、いつでも聞いてくださいね。

タイトルとURLをコピーしました