【PowerPoint自動化】「うっかり上書き」を撲滅せよ!日付付きで安全に保存するVBA入門
こんにちは。業務自動化の現場で数々の苦難を乗り越えてきたエンジニアです。
皆さんは、せっかく作ったプレゼン資料を「保存」ボタンを押した瞬間に「あ、前のバージョンも取っておけばよかった…」と後悔したことはありませんか?
手動で「名前を付けて保存」からファイル名を変更する作業は、人間にとって最もミスが起きやすいポイントです。「自動化」とは、こうしたヒューマンエラーの隙間を埋めることから始まります。
今回は、PowerPoint VBAを使って「ボタン一つで今日の日付をファイル名に結合し、別名保存する」という、実務で絶対に役立つテクニックを伝授します。これさえマスターすれば、もうファイルのバージョン管理に頭を悩ませることはありません。
—
1. VBAを書くための「最初の儀式」
VBAは、PowerPointの裏側にある「開発タブ」から呼び出します。まだ表示されていない方は、以下の手順で呼び出してください。
1. PowerPointの「ファイル」タブ > 「オプション」 > 「リボンのユーザー設定」を選択。
2. 右側のリストにある「開発」にチェックを入れて「OK」。
3. これでリボンに「開発」タブが出現しました。ここがあなたの聖域です。
「Visual Basic」ボタンをクリックし、メニューの「挿入」>「標準モジュール」をクリック。白いキャンバスが現れたら準備完了です。
—
2. 魔法のコード:日付付き保存マクロ
以下のコードをコピーして、エディタに貼り付けてみてください。
Sub SaveWithTodayDate()
‘ プレゼンテーションの保存先とファイル名を制御する変数
Dim folderPath As String
Dim fileName As String
Dim dateString As String
Dim fullPath As String
‘ 1. 現在のプレゼンが一度も保存されていない場合のエラー回避
If ActivePresentation.Path = “” Then
MsgBox “先に一度、手動で保存してください。保存先が不明です。”, vbCritical
Exit Sub
End If
‘ 2. 保存先パスを取得(現在開いているファイルと同じ場所に保存)
folderPath = ActivePresentation.Path & “\”
‘ 3. 日付文字列を作成 (例: 20231027)
dateString = Format(Date, “yyyymmdd”)
‘ 4. ファイル名に日付を結合(拡張子.pptxを除いた名前に付与)
‘ ※ .Name をそのまま使うと拡張子が含まれるため工夫が必要
fileName = Left(ActivePresentation.Name, InStrRev(ActivePresentation.Name, “.”) – 1)
fullPath = folderPath & fileName & “_” & dateString & “.pptx”
‘ 5. 保存を実行
On Error Resume Next ‘ 万が一の保存エラーを制御
ActivePresentation.SaveAs FileName:=fullPath
If Err.Number = 0 Then
MsgBox “保存成功!” & vbCrLf & fullPath, vbInformation
Else
MsgBox “保存に失敗しました。ファイルが使用中ではありませんか?”, vbCritical
End If
On Error GoTo 0
End Sub
—
3. コードの「魂」を読み解く
このコードで重要なポイントを解説します。ここを理解すれば、他のVBAも怖くありません。
- `ActivePresentation`: これは「今まさにあなたが触っているプレゼンファイル」を指す、VBAの最重要オブジェクトです。
- `Format(Date, “yyyymmdd”)`: プログラミングの世界では、日付は「シリアル値」という数字で管理されています。それを人間が見やすい「YYYYMMDD」の形式に変換するのがこの関数です。
- `InStrRev`: ファイル名から「.pptx」を取り除くための関数です。後ろからドットの位置を探し、そこまでの文字列を切り出しています。初心者が陥りやすい「ファイル名が二重拡張子になる」という罠をこれで回避します。
- `On Error Resume Next`: 「もしエラーが起きても止まらずに次の行へ進め」という命令です。保存時の予期せぬエラーでマクロが強制終了するのを防ぐ、現場の知恵です。
—
4. 陥りやすいエラーと回避策
初心者がよく詰まるポイントを先回りしてお伝えします。
1. 「まだ一度も保存していないファイル」に対して実行した場合
- `ActivePresentation.Path` が空っぽになります。上記コードでは冒頭の `If` 文でこれをチェックし、事故を未然に防いでいます。
2. ファイル名に「_」を足すと長くなりすぎる
- Windowsのファイルパス制限(260文字)に注意してください。階層が深すぎる場合は、保存場所を見直す必要があります。
—
さあ、次のステージへ
このマクロを「クイックアクセスツールバー」に登録しておけば、ワンクリックで保存完了です。
「マクロの記録」は便利ですが、今回のように「日付という動的な情報」を扱う場合、コードを自分で書く必要があります。 今回のコードを書き写し、実際に動かしてみたという経験は、あなたのVBAエンジニアとしての大きな第一歩です。
次はこれに「保存したら自動でPDFも書き出す」という機能を追加するのも面白いかもしれません。自動化の旅は、ここからが本番ですよ!
何か疑問があれば、いつでも聞いてください。あなたの自動化ライフを全力で応援しています。
