こんにちは!PowerPointでの資料作り、本当にお疲れ様です。
気づけばデスクトップに「プレゼンテーション1」「資料修正版_最終_本当に最終(2)」……なんてウィンドウが何個も重なり、どれを保存してどれを閉じればいいのか分からなくなっていませんか?
「もう、全部きれいに片付けて終わりにしたい!」
そんなマルチタスクな実務の悩みを一撃で解決するのが、今回お届けする『開いているすべてのファイルを、未保存の変更があるものだけ確認ダイアログを出して一括保存して閉じる「お片付け」マクロ』です。
ここをクリアすれば、PowerPoint VBAの基本オブジェクトの扱い方はバッチリです!
マクロの記録から一歩抜け出して、実務で本当に役立つ「生きたコード」を一緒に書いていきましょう。
—
1. なぜ「お片付け」でPowerPoint VBAの基本が身につくのか?
PowerPoint VBAを学ぶ上で、避けて通れないのが「オブジェクトの階層構造(オブジェクトモデル)」です。
Excel VBAなら `Workbooks` ですが、PowerPoint VBAの世界では、今開いているすべてのウィンドウやファイルは`Presentations`(プレゼンテーションの集合体)という巨大な箱に入っています。
今回やりたい「お片付け」のロジックは、たったこれだけです。
1. 開いているすべてのプレゼンテーションを、1冊ずつ順番に手に取る(ループ処理)。
2. 「最近、変更を加えたかな?」と確認する(`Saved` プロパティの判定)。
3. 変更があれば「保存しますか?」とダイアログを出す。
4. ウィンドウを閉じる。
この一連の流れには、VBAの基礎(コレクション、ループ、条件分岐、プロパティ)がギュッと詰まっています。最高峰の自動化への第一歩として、これ以上ない題材です。
—
2. 【実践】コピペで動く「お片付け」マクロの全容
それでは早速、開発の現場でそのまま使える実用的なコードをご紹介します。
VBAエディタ(Alt + F11)を開き、標準モジュールに以下のコードを貼り付けてください。
Sub CleanupPresentations()
‘ —————————————————————–
‘ 処理名:開いているすべてのプレゼンテーションを一括保存・閉じる「お片付け」マクロ
‘ 概要 :未保存の変更があるファイルのみ確認ダイアログを出して保存し、全て閉じます。
‘ —————————————————————–
‘ エラーハンドリング(予期せぬトラブルで強制終了するのを防ぎます)
On Error GoTo ErrorHandler
‘ 1. 開いているファイルが1つもない場合のガード
If Presentations.Count = 0 Then
MsgBox “現在、開いているプレゼンテーションはありません。”, vbInformation, “お片付け完了”
Exit Sub
End If
Dim targetPres As Presentation
Dim closedCount As Long
closedCount = 0
‘ 2. 「後ろから数えてループする」のがVBAの鉄則!
‘ ※前からループすると、ファイルを閉じた瞬間にインデックスがズレてバグるため
Dim i As Long
For i = Presentations.Count To 1 Step -1
Set targetPres = Presentations(i)
‘ 3. すでに一度も保存されておらず名前すらない新規ファイル、
‘ または、開いてから変更が加えられた(Saved = False)かを判定
If targetPres.Saved = False Then
‘ パスが未設定(まだ一度も保存されていないファイル)の場合の対策
Dim promptMsg As String
If targetPres.Path = “” Then
promptMsg = “「” & targetPres.Name & “」はまだ保存されていません。保存しますか?”
Else
promptMsg = “「” & targetPres.Name & “」に変更が加えられています。上書き保存しますか?”
End If
‘ ユーザーに確認ダイアログを表示(Yes / No / キャンセル)
Dim userChoice As VbMsgBoxResult
userChoice = MsgBox(promptMsg, vbYesNoCancel + vbQuestion, “変更の確認 – お片付けマクロ”)
Select Case userChoice
Case vbYes
‘ 名前のない新規ファイルならダイアログを出して保存、名前があれば上書き保存
If targetPres.Path = “” Then
‘ 新規ファイル用:名前をつけて保存ダイアログを強制発動
targetPres.Save
Else
‘ 既存ファイル:黙って上書き保存
targetPres.Save
End If
targetPres.Close
closedCount = closedCount + 1
Case vbNo
‘ 保存せずに閉じる
targetPres.Close
closedCount = closedCount + 1
Case vbCancel
‘ 「キャンセル」が選ばれたら、そこでマクロ全体の処理を中断
MsgBox “お片付けを中断しました。”, vbInformation, “中断”
Exit Sub
End Select
Else
‘ 変更がないファイルはそのまま静かに閉じる
targetPres.Close
closedCount = closedCount + 1
End If
Next i
‘ 4. 完了報告
MsgBox closedCount & “件のプレゼンテーションをきれいに片付けました!お疲れ様です。”, vbInformation, “お片付け完了”
Exit Sub
ErrorHandler:
MsgBox “予期せぬエラーが発生しました。” & vbCrLf & Err.Description, vbCritical, “エラー”
End Sub
—
3. 押さえておきたい!プロのエンジニアが仕込んだ3つのこだわりポイント
このコード、ただ動くだけではありません。実務で「使える」ように、いくつかの重要なテクニック(知見)が組み込まれています。
① 「後ろからループ(逆順ループ)」の哲学
コード内で `For i = Presentations.Count To 1 Step -1` と書いている部分があります。
もしこれを `1 To Presentations.Count`(最初から順に)にしてしまうと、ファイルを1つ閉じた瞬間に、後ろに控えていたファイルたちの番号(インデックス)が繰り上がり、VBAがパニックを起こしてエラーや取りこぼしが発生します。
「何かを削除・閉じる処理のループは、後ろから回す」――これはPowerPoint・Excel VBA共通の鉄則です。必ず覚えておきましょう。
② `Saved` プロパティという魔法のセンサー
プレゼンテーションオブジェクトには、`Saved` という非常に優秀なプロパティが備わっています。
- `True`:最後に保存されてから、変更は一切ないよ。
- `False`:文字や図形を動かしたり、テキストを書き換えたりして、未保存の変更があるよ。
このプロパティを事前にチェックすることで、「変更のないきれいなファイル」には余計なダイアログを出さず、一瞬で閉じることができます。ユーザービリティを考えた優しい設計ですね。
③ まだ一度も保存されていない「新規ファイル(名無しの権兵衛)」への配慮
もしデスクトップで「プレゼンテーション1」を開いたまま、何も保存していなかった場合、そのファイルの `Path` は空欄(`””`)になります。
この状態のまま強制的に上書き保存(`.Save`)を走らせようとすると、VBAは「どこに保存していいか分からないよ!」と怒り出してエラーになります。
そのため、コード内では `If targetPres.Path = “” Then` で判定し、名前がまだないファイルの場合はPowerPoint標準の「名前を付けて保存ダイアログ」がちゃんと立ち上がるように制御しています。
—
4. よくあるエラーと対策
初心者がこのマクロを試すときにつまずきやすいポイントを先回りして解説します。
- Q. マクロを実行しても何も起きません
- A. 現在開いているプレゼンテーションが「0個」の可能性があります。コード内の `Presentations.Count = 0` のガード節が働き、メッセージボックスが出て終了している状態です。最低1つはファイルを開いてから実行してください。
- Q. 「セキュリティの警告:マクロが無効にされました」と出る
- A. PowerPointのセキュリティ設定によりマクロがブロックされています。マクロを含むファイルを保存・運用する際は、信頼できる場所(フォルダー)にファイルを配置するか、セキュリティセンターからマクロを有効化してください。また、コードを保存する際はファイル形式を「PowerPoint プレゼンテーション」ではなく「PowerPoint マクロ有効プレゼンテーション(.pptm)」にする必要があります。
—
まとめ
今回は、開いているすべてのプレゼンテーションを確認しながらスマートに一括でお片付けするユーティリティマクロをご紹介しました。
- `Presentations` コレクションで全ファイルを手元に集める。
- 逆順ループ(`Step -1`)で安全に閉じる。
- `Saved` プロパティで変更の有無をスマートに判定する。
この3つの極意さえ押さえておけば、PowerPointのウィンドウ管理系マクロはもう怖くありません。
日々の面倒な手作業を自動化して、本当にクリエイティブな資料作りの時間に集中していきましょう!
あなたのVBAライフが、よりスマートで快適なものになりますように。
