【入門編】【中級者】複数のプレゼンテーションを結合する際、異なるデザインテンプレートが原因で発生するフォントサイズやレイアウトの崩れを自動補正するマクロ – PowerPoint VBA解析バイブル

スポンサーリンク

PowerPoint VBAの極意:デザイン崩壊を防ぐ「自動マージ戦略」をマスターしよう

こんにちは。自動化の世界へようこそ。
現場で複数のPowerPointファイルを結合する際、こんな経験はありませんか?

「別の人が作ったファイルをコピペしたら、フォントが勝手に変わった」
「レイアウトがガタガタになり、手作業で1枚ずつ修正する羽目になった」

これは、「スライドマスター」という設計図がファイルごとに異なるからです。PowerPointのVBAは、単なる操作の自動化ツールではありません。オブジェクトの背後にある「マスターの力学」を制御する、設計者のための武器です。

今日は、複数のPPTXを結合してもレイアウトを壊さない、実用的な「自動補正マージ」の極意を伝授します。

—

1. なぜ「コピペ」でレイアウトが崩れるのか?

PowerPointのオブジェクト(テキストボックスや図形)は、「どのスライドレイアウトに紐付いているか」という情報を持っています。
手動でコピペすると、移動先のスライドに同名のレイアウトがない場合、PowerPointは「とりあえず一番近い設定」を適用しようとします。これが、フォントや配置が狂う正体です。

これを解決するには、VBAで「スライドをインポート(InsertFromFile)」する際に、「元のレイアウト情報を一時的に保持するか、あるいはマージ後に強制的にスタイルを同期させる」という手順が必要です。

—

2. 実践:デザインを強制統合するマージマクロ

以下のコードは、フォルダ内の全PPTXを一つのプレゼンテーションにまとめ、フォントとフォントサイズを強制的に統一するプロトタイプです。

Sub MergePresentationsWithStyleFix()
Dim targetPres As Presentation
Dim sourcePres As Presentation
Dim slidePath As String
Dim folderPath As String
Dim fileName As String
Dim sld As Slide
Dim shp As Shape

‘ 1. 新規プレゼンテーションを作成
Set targetPres = Presentations.Add

‘ 結合したいファイルが入っているフォルダを指定
folderPath = “C:\Your\Folder\Path\”
fileName = Dir(folderPath & “.pptx”)

‘ 2. フォルダ内のファイルを順次読み込み
Do While fileName <> “”
Set sourcePres = Presentations.Open(folderPath & fileName, WithWindow:=False)

‘ スライドを末尾に挿入(KeepSourceFormatting:=False で対象のマスターに合わせる)
sourcePres.Slides.Range.Copy
targetPres.Slides.Paste

sourcePres.Close
fileName = Dir
Loop

‘ 3. 【重要】全スライドのフォントを強制統一する(レイアウト崩れの補正)
Call StandardizeFonts(targetPres)

MsgBox “結合と整形が完了しました!”
End Sub

Sub StandardizeFonts(pres As Presentation)
Dim sld As Slide
Dim shp As Shape

For Each sld In pres.Slides
For Each shp In sld.Shapes
‘ テキストがある図形のみ対象
If shp.HasTextFrame Then
If shp.TextFrame.HasText Then
With shp.TextFrame.TextRange.Font
.Name = “Meiryo UI” ‘ 規定のフォント
.Size = 14 ‘ 規定のサイズ
End With
End If
End If
Next shp
Next sld
End Sub

—

3. コードのポイント:ここが「プロ」の視点

① `WithWindow:=False` の効能

ファイルを次々と開く際、いちいちウィンドウが表示されるとPCが重くなり、処理速度も低下します。`WithWindow:=False` を使うことで、バックグラウンドでの高速処理が可能になります。これは大規模な結合を行う際の定石です。

② `KeepSourceFormatting` の戦略

`Paste` メソッド実行時、`KeepSourceFormatting`(元形式の保持)をあえてオフにする、あるいは調整することで、対象ファイルのマスターに従わせることができます。これがレイアウト崩れを防ぐ第一歩です。

③ なぜ「標準化関数」を分けるのか?

`StandardizeFonts` のように処理を切り出すのは、コードの保守性のためです。「フォントを変えたい」「次は配色も変えたい」という要件が追加されたとき、メインの結合処理を触らずに済みます。これが中級者へのステップアップです。

—

4. 陥りやすい罠と対策

  • 「図形の中に図形がある」問題:

`Shapes`の中に`GroupedShapes`が含まれていると、単純なループではフォントが変更できないことがあります。再帰処理(関数の中で自分自身を呼び出す)が必要になる場合もありますが、まずは上記コードで「主要なテキストボックス」を制覇することから始めましょう。

  • マスターが壊れている場合:

稀に、元ファイルのスライドマスター自体が破損しているケースがあります。その場合はVBAでどうこうするより、一度「新規ファイルにスライドのみをインポート」し直す方が安全です。

—

さあ、次のステージへ

このコードをベースに、皆さんの現場のルールに合わせてカスタマイズしてみてください。
「フォントだけ統一できれば、あとはレイアウトを微調整するだけ」という状態になれば、作業時間は劇的に短縮されます。

PowerPoint VBAの力は、面倒な「単純作業」を「思考の時間」へと変換することにあります。
コードが動いたときの感動を、ぜひ味わってください。応援しています!

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