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