こんにちは。現場の最前線で自動化の仕組みを構築しているチーフアーキテクトです。
PowerPoint VBAの世界へようこそ。ここは、Excel VBAとは似て非なる「スライドというキャンバス」を操る独特の面白さがある領域です。
マクロの記録を卒業し、いよいよ「複数のファイルを一つにまとめる」という実務的な課題に直面しているあなたへ。この作業、手動でやると「貼り付け先のデザインに引っ張られてレイアウトが崩れた!」という悲鳴が上がるポイントですよね。
今日は、「スライドマスターの競合」という高い壁を突破し、元のデザインを維持したままスマートに結合するプロのコードを伝授します。ここをマスターすれば、あなたのPowerPoint操作の次元が一段階上がりますよ。
—
1. 核心となるメソッド:`InsertFromFile` の正体
PowerPoint VBAでファイルを結合する際、最も強力な武器になるのが `InsertFromFile` メソッドです。
‘ 基本形
Presentations(1).Slides.InsertFromFile(FileName, Index, SlideStart, SlideEnd)
このメソッドは、指定したファイルからスライドを「流し込む」機能です。しかし、中級者が必ずぶつかる罠があります。それは、「流し込まれたスライドが、コピー先のデザイン(スライドマスター)に強制的に書き換えられてしまう」という現象です。
これを防ぎ、元のデザインを守り抜くことが今回のミッションです。
—
2. 【実践コード】デザインを維持した一括結合ツール
このコードは、特定のフォルダ内にあるすべての `.pptx` ファイルを、実行中のプレゼンテーションの後ろに次々と結合していくものです。
Sub MergePresentations_KeepFormatting()
Dim targetPresentation As Presentation
Dim currentSlideCount As Integer
Dim fileName As String
Dim folderPath As String
Dim insertedCount As Integer
Dim i As Integer
‘ 1. 自身のプレゼンテーションをセット
Set targetPresentation = ActivePresentation
‘ 2. 結合したいファイルが入っているフォルダを指定(末尾に \ を忘れずに)
‘ ※実際の実務ではダイアログで選択させるのがスマートです
folderPath = “C:\Users\YourName\Desktop\MergeFolder\”
‘ 3. フォルダ内の最初のファイルを取得
fileName = Dir(folderPath & “.pptx”)
‘ 画面の更新を止める(高速化とチラつき防止)
Application.WindowState = ppWindowMinimized
Do While fileName <> “”
‘ 自分自身を結合対象にしないためのチェック
If fileName <> targetPresentation.Name Then
‘ 現在のスライド総数を把握(挿入位置の決定に必要)
currentSlideCount = targetPresentation.Slides.Count
‘ 4. スライドの挿入
‘ InsertFromFile(ファイル名, 挿入先インデックス, 開始スライド, 終了スライド)
‘ 0を指定すると全件挿入されます
insertedCount = targetPresentation.Slides.InsertFromFile( _
folderPath & fileName, currentSlideCount, 1, 0)
‘ 5. 【重要】挿入したスライドのデザイン(マスター)を維持する処理
‘ InsertFromFile直後はデザインが崩れる場合があるため、
‘ 挿入されたスライドに対して「元の書式を保持」の設定をループで適用します
For i = 1 To insertedCount
‘ 挿入されたスライドのインデックスは currentSlideCount + i
‘ デザイン(スライドマスター)の継承を制御する
With targetPresentation.Slides(currentSlideCount + i)
‘ これがデザイン崩れを防ぐ魔法のプロパティ
.FollowMasterBackground = msoFalse
.DisplayMasterShapes = msoTrue
End With
Next i
Debug.Print fileName & ” から ” & insertedCount & ” 枚挿入しました。”
End If
‘ 次のファイルへ
fileName = Dir()
Loop
‘ 画面表示を戻す
Application.WindowState = ppWindowNormal
MsgBox “全てのプレゼンテーションの結合が完了しました!”, vbInformation
End Sub
—
3. プロの視点:なぜデザインが崩れるのか?
PowerPointには「スライドマスター」という設計図があります。
`InsertFromFile` を使うと、PowerPointは「新しいスライドが入ってきたぞ!よし、今のプレゼンテーションの設計図(マスター)に合わせて整形してあげよう」という余計なお節介を焼きます。
解決の鍵
コード内の以下の部分が、その「お節介」を制止する役割を果たしています。
.FollowMasterBackground = msoFalse
これは、「挿入先のマスター背景に従わなくていいよ」という命令です。これにより、挿入されたスライドは元のファイルが持っていたデザインを維持しようと踏みとどまってくれます。
—
4. 陥りやすいエラーと回避策
① ファイルが開けない・見つからない
`Dir` 関数でファイルを探す際、パスの末尾に `\` が抜けているとエラーになります。`folderPath = “C:\Temp”` ではなく `”C:\Temp\”` と書く癖をつけましょう。
② 大量のスライドによるメモリ不足
100枚を超えるような大きなファイルを何十個も結合すると、PowerPointが不安定になります。
「1ファイル処理するごとに保存する」、あるいは 「一度非表示で開いて、中身を確認してから閉じる」 というオブジェクトのライフサイクル管理が必要になりますが、まずは上記のコードで「動き」を体感してください。
③ スライドマスターの増殖
この方法で結合を繰り返すと、挿入先のファイルに「スライドマスター」がどんどん増えていきます。これは仕様上避けられないことですが、ファイルサイズが肥大化する原因になります。
結合後は、「表示」タブ → 「スライドマスター」から、使っていないマスターを整理することをお勧めします。
—
5. 次のステップへのアドバイス
「マクロの記録」では、`InsertFromFile` は記録されません。つまり、このメソッドを知っているだけで、あなたは既に「VBAエンジニア」としての階段を一段登ったことになります。
次は、「結合した後に、特定のスライドに社外秘スタンプを自動で押す」とか、「特定のスライドだけをPDFとして書き出す」といった、結合+αの処理に挑戦してみてください。
PowerPoint VBAは、視覚的な成果がすぐに確認できる最高に楽しいツールです。今回のコードをベースに、あなたの業務に合わせてカスタマイズしてみてくださいね。
もし途中で止まってしまったら、いつでもこのコードに戻ってきてください。基本はここにすべて詰まっています。
Happy Coding!
