【入門編】【初心者】複数のPPTXファイルをダイアログで複数選択し、指定した順番通りに1つのPDFに結合して出力する順序指定エクスポートマクロ – PowerPoint VBA解析バイブル

スポンサーリンク

こんにちは! PowerPoint VBAの世界へようこそ。
マクロの記録ボタンを押すだけのステージから一歩抜け出し、「自分の手で業務を劇的に効率化するツールを作りたい!」という熱意を持つあなたを、今日は心から歓迎します。

実務でこんなお悩みを持ったことはありませんか?
「会議のために、バラバラのPowerPointファイル(.pptx)を1つにまとめたい……しかも、提出先の指定があるからPDF形式で!」
「ファイルが10個も20個もあると、コピペや名前変更だけで何時間も残業になってしまう……」

今回は、「複数のPPTXファイルをダイアログで複数選択し、ユーザーが意図した順番通りに1つのPDFに結合して出力する」という、実務で即戦力になるマクロの全貌を、世界最高峰のアーキテクト視点から優しく、そして深く解説していきます。

ここをクリアすれば、PowerPoint VBAの基本と「ファイル操作の本質」はバッチリです。さあ、一緒に扉を開けましょう!

—

1. 全体像の把握:このマクロがやること

今回作成するマクロは、以下の4ステップをVBAの裏側で自動実行します。

1. ファイルの複数選択(ダイアログ):Windows標準の「ファイルを開く」ダイアログを出し、ユーザーにPPTXを選ばせます。
2. 順序の制御:ファイル名や選択順の罠を回避し、安全に結合するための土台を作ります。
3. プレゼンテーションの統合:メモリ上で空の新しいプレゼンテーションを作り、そこに選ばれたファイルを次々と「合体(Paste/Insert)」させていきます。
4. PDFエクスポート&クリーンアップ:結合された巨大なプレゼンテーションを1つのPDFとして出力し、メモリのゴミをキレイに掃除(解放)します。

—

2. 【実践】コピペで動く!順序指定PDFエクスポート・コード

それでは早速、開発環境(VBE)に貼り付けて即座に動かせる実用コードを公開します。
標準モジュールに以下のコードを丸ごと貼り付けてください。

Option Explicit

‘ ==============================================================================
‘ 複数PPTXファイルを一括選択し、指定順に1つのPDFへ結合出力するマクロ
‘ ==============================================================================
Sub ExportSelectedPptxToSinglePdf()

Dim fd As FileDialog
Dim selectedFiles As Variant
Dim targetPres As Presentation
Dim tempPres As Presentation
Dim i As Long
Dim savePath As String
Dim fso As Object

‘ 1. FileDialogオブジェクトの生成(ファイル選択ダイアログ)
Set fd = Application.FileDialog(msoFileDialogFilePicker)

With fd
.Title = “結合したいPowerPointファイルを順番に選択してください(複数選択可)”
.Filters.Clear
.Filters.Add “PowerPoint プレゼンテーション”, “.pptx; .ppt”
.AllowMultiSelect = True ‘ 複数選択を許可

‘ ユーザーが「キャンセル」を押した場合は処理を終了
If .Show <> -1 Then Exit Sub

Set selectedFiles = .SelectedItems
End With

‘ 2. 結合用の新しいプレゼンテーションを裏側で作成
‘ (※最初のファイルをベースにするか、完全な新規スライドから始めるか)
Set targetPres = Presentations.Add(msoFalse) ‘ msoFalse = 画面描画を隠して高速化

‘ エラーハンドリングの準備(途中で失敗してもメモリリークを防ぐため)
On Error GoTo ErrorHandler

‘ 3. 選択されたファイルを順番にループして結合
For i = LBound(selectedFiles) To UBound(selectedFiles)

‘ 選択されたファイルを一時的に開く(非表示)
Set tempPres = Presentations.Open(FileName:=selectedFiles(i), _
ReadOnly:=msoTrue, _
WithWindow:=msoFalse)

‘ 一時ファイルの全スライドを、ターゲットの末尾に挿入
tempPres.Slides.InsertFromFile FileName:=selectedFiles(i), _
Index:=targetPres.Slides.Count

‘ 読み込んだ一時ファイルを閉じる
tempPres.Close
Set tempPres = Nothing

Next i

‘ 4. 保存先のパスを決定(最初のファイルが保存されているフォルダに出力)
Set fso = CreateObject(“Scripting.FileSystemObject”)
savePath = fso.GetParentFolderName(selectedFiles(1)) & “\【統合出力】” & Format(Now, “yyyymmdd_hhmmss”) & “.pdf”

‘ 5. 1つのPDFとして一括エクスポート
targetPres.SaveAs FileName:=savePath, FileFormat:=ppSaveAsPDF

‘ 6. 完了メッセージと後始末
targetPres.Close
Set targetPres = Nothing

MsgBox “PDFへの結合が正常に完了しました!” & vbCrLf & _
“保存先: ” & savePath, vbInformation, “処理成功”

Exit Sub

ErrorHandler:
‘ 万が一エラーが起きた場合の安全装置
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “予期せぬエラー”

‘ 開いたままになっているかもしれない一時オブジェクトを確実に解放
On Error Resume Next
If Not tempPres Is Nothing Then tempPres.Close
If Not targetPres Is Nothing Then targetPres.Close
Set targetPres = Nothing
Set tempPres = Nothing
End Sub

—

3. コードの心臓部を紐解く!知っておくべき3つの重要ポイント

初学者のあなたが「なぜこの書き方をしているのか?」を理解できるように、プロの知見が詰まった3つのポイントを解説します。

① `FileDialog` オブジェクトの底力

マクロの記録ではファイル選択ダイアログを自由に出すことはできません。ここで使っている `Application.FileDialog(msoFileDialogFilePicker)` こが、Windowsのモダンなファイル選択画面を呼び出す最強のメソッドです。
`AllowMultiSelect = True` を指定することで、ユーザーが `Ctrl` キーや `Shift` キーを押しながら複数のファイルを直感的に選べるようになります。

② `InsertFromFile` メソッドの魔法

複数のプレゼンテーションを結合する際、1枚ずつコピペするのはVBAにとっても人間にとっても悪夢です。
PowerPoint VBAには、「指定したファイルの全スライドを、一撃で別のプレゼンテーションの特定位置に差し込む」 という強力な `InsertFromFile` メソッドが用意されています。これを使うことで、驚くほど短いコードで美しくファイルを結合できます。

③ メモリのライフサイクル管理(極めて重要!)

プログラミング初学者が最も陥りがちな罠が、「ファイルを次々開いたはいいが、閉じ忘れてメモリを圧迫し、最終的にPowerPointがフリーズする(あるいはエラーになる)」 という現象です。
上記のコードでは、`tempPres.Close` で一時ファイルを小まめに閉じ、さらに `On Error GoTo ErrorHandler` という「安全装置」を設けています。万が一途中でエラーが起きても、メモリのゴミを残さないプロ仕様の設計にしています。

—

4. 現場でよくある「落とし穴」と回避テクニック

実際にこのマクロを現場で運用し始めると、いくつかの「思わぬ壁」にぶつかることがあります。先輩エンジニアからのアドバイスとして事前に頭に入れておきましょう。

  • 罠A:ファイルを選ぶ順番がバラバラになる?
  • 対策:Windowsのダイアログで複数ファイルを選択する際、「最初にクリックしたファイル」が配列の先頭(LBound)に来るとは限りません。 厳密に順番をコントロールしたい場合は、ダイアログで選択する際にファイル名順に並ぶよう命名規則(例: `01_表紙.pptx`, `02_概要.pptx`)を工夫するか、ファイル名でソートするロジックを挟むと完璧です。
  • 罠B:PDF変換時にスライドのサイズ(アスペクト比)が崩れる
  • 対策:結合元のファイル同士でスライドのサイズ(16:9 と 4:3 など)が混ざっていると、PDF化した際にレイアウトが崩れます。運用ルールとして、結合するファイルはあらかじめアスペクト比を統一しておくことが、美しい自動化の鉄則です。

—

最後に:ここからあなたの自動化エンジニアとしての旅が始まる

お疲れ様でした!
今回あなたが手に入れたのは、単なる「ファイルをまとめるコード」ではありません。

  • ユーザーインターフェース(ダイアログ)の制御
  • オブジェクトの生成と確実な解放(ライフサイクル管理)
  • エラーハンドリングによる堅牢性

これらは、すべての高度な業務自動化に通じる「エンジニアリングの本質」そのものです。

「ここをクリアすれば、PowerPoint VBAの基本はバッチリですよ!」
自信を持って、まずはご自身のPCにあるいくつかのPPTXファイルで実験してみてください。あなたの毎日の面倒な手作業が、ワンクリックで終わる瞬間の快感をぜひ味わってくださいね。

それでは、次回の実践的な自動化解説でお会いしましょう!

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