こんにちは!PowerPoint VBAの世界へようこそ。
マクロの記録ボタンを押すだけの操作から一歩踏み出し、「自分の手で業務を自動化するツールを作りたい!」という情熱を持つあなたを、今日は心から歓迎します。
実務の現場では、「特定の案件名やキーワード(例: `【提出用】` や `2024年度` など)が含まれるファイルだけを、別のフォルダに自動でバックアップしたい」というようなファイル整理の悩みが絶えません。これを手作業でやると、ファイルを探すだけでも目が回りそうですし、ミスも起きやすくなりますよね。
今回は、そんな日常の煩雑な作業を一瞬で解決する「キーワード仕分け・自動バックアップスクリプト」を一緒に作っていきましょう。
ここをクリアすれば、ファイルシステムの操作とPowerPointの基本制御がグッと身につきますよ。さあ、気負わずに扉を開けてみましょう!
—
1. 現場で即役立つ!ファイル仕分けスクリプトの全貌
まずは、今回作成するマクロの全体像を見ていただきます。
このコードは、指定した「検索元フォルダ」の中身を総なめにし、ファイル名に特定のキーワードが含まれているものだけを見つけて、「バックアップ用フォルダ」へ安全にコピーするものです。
以下のコードを、PowerPointのVBAエディタ(後述)にそのまま貼り付けてみてください。
Sub BackupSpecificPresentationFiles()
‘ =====================================================================
‘ 目的: 特定のキーワードをファイル名に含むPowerPointファイルを別フォルダへバックアップする
‘ 対象: 初学者の方でも安心して動かせるよう、安全なファイルシステム操作を採用
‘ =====================================================================
Dim sourceFolder As String
Dim backupFolder As String
Dim keyword As String
Dim fileName As String
Dim fullSourcePath As String
Dim fullBackupPath As String
Dim fileCount As Long
‘ 1. 設定エリア(※ご自身の環境のパスに合わせて書き換えてください)
sourceFolder = “C:\Users\YourName\Desktop\プレゼン元フォルダ\”
backupFolder = “C:\Users\YourName\Desktop\バックアップ先フォルダ\”
keyword = “【提出用】” ‘ 検索したいキーワード
‘ 2. フォルダパスの末尾に半角の「\」が付いているかチェックして補正
If Right(sourceFolder, 1) <> “\” Then sourceFolder = sourceFolder & “\”
If Right(backupFolder, 1) <> “\” Then backupFolder = backupFolder & “\”
‘ 3. バックアップ先フォルダが存在するか確認し、なければ自動作成する
If Dir(backupFolder, vbDirectory) = “” Then
MkDir backupFolder
End If
‘ 4. 検索元フォルダからPowerPointファイル(.ppt, .pptx)を総覧する準備
‘ Dir関数は条件に合う最初のファイル名を返す
fileName = Dir(sourceFolder & “.ppt”)
‘ 該当ファイルが1つも無い場合のガード処理
If fileName = “” Then
MsgBox “対象となるPowerPointファイルが見つかりませんでした。”, vbExclamation, “通知”
Exit Sub
End If
fileCount = 0
‘ 5. ループ処理:フォルダ内のファイルをしらみつぶしにチェック
Do While fileName <> “”
‘ ファイル名に指定キーワードが含まれているか判定
‘ InStr関数は、文字列の中に目的の文字が含まれていれば「0より大きい数値」を返す
If InStr(1, fileName, keyword) > 0 Then
fullSourcePath = sourceFolder & fileName
fullBackupPath = backupFolder & fileName
‘ ファイルをコピー(既存の同名ファイルは上書きされるので注意)
FileCopy fullSourcePath, fullBackupPath
fileCount = fileCount + 1
End If
‘ 次のファイルを取得
fileName = Dir()
Loop
‘ 6. 完了報告
MsgBox “処理が完了しました!” & vbCrLf & _
fileCount & ” 件のファイルをバックアップしました。”, vbInformation, “成功”
End Sub
—
2. 初心者でも安心!コードの重要ポイントを噛み砕く
このスクリプトには、VBAでファイル操作を行う際の「必須テクニック」がギュッと詰まっています。いくつか重要なパーツをピックアップして解説しますね。
① パスの末尾スラッシュ問題を防ぐ (`Right関数`)
Windowsのフォルダパスを扱うとき、`C:\Folder` と書くか `C:\Folder\` と書くかでエラーの原因になります。
コード内の `If Right(sourceFolder, 1) <> “\” Then …` という部分は、「もし末尾に `\` が無かったら自動で足してあげる」という、実務で非常に重宝する防御的プログラミングのお作法です。
② 目視できないファイルを探す魔法の関数 (`Dir関数`)
VBAでファイルを検索するときに最もよく使われるのが `Dir` 関数です。
- `Dir(sourceFolder & “.ppt”)` と指定することで、古い `.ppt` も新しい `.pptx` もまとめて網羅できます。
- `Do While fileName <> “”` のループと組み合わせることで、フォルダ内のファイルを先頭から順番にすべてペロリと舐め尽くすようにチェックしていくことができます。
③ キーワード判定の要 (`InStr関数`)
「ファイル名に特定の文字が含まれているか?」を判定するのが `InStr(1, fileName, keyword)` です。
これは、`fileName` という文字列の中に `keyword` が何文字目にあるかを調べる関数です。もし含まれていなければ `0` を返すため、「`> 0`(0より大きい)」という条件式にすることで、「含まれていた場合」を正確にキャッチできます。
—
3. 開発の現場でやりがち!陥りやすいエラーと対策
プログラミングを学び始めると、誰もが一度は次のような壁にぶつかります。あらかじめ知っておけば怖くありません。
罠1:『パスが見つかりません』エラー (Error 76)
- 原因: コード内の `sourceFolder` や `backupFolder` で指定したフォルダが、実際のエクスプローラー上に存在しない、またはスペルミスがある場合。
- 対策: あらかじめデスクトップなどに空のフォルダを作り、エクスプローラーのアドレスバーからパスを正確にコピーしてコードに貼り付けましょう。
罠2:マクロを実行してもファイルがコピーされない
- 原因: 指定したキーワード(例: `【提出用】`)が、実際のファイル名と全角・半角の違いや、カッコの種類の違い(例: `[` と `【`)で一致していない場合。
- 対策: まずはシンプルなキーワード(例: `2024` や `test` など)でテストし、正しく動くことを確認してから複雑な名前に挑戦するのが近道です。
—
4. VBAエディタの開き方と実行の手順(おさらい)
「そもそも、このコードをどこに書けばいいの?」という方のために、簡単な手順をまとめておきます。
1. PowerPointを起動し、適当なプレゼンテーション(または新規プレゼンテーション)を開きます。
2. キーボードの [Alt] + [F11] キーを押して、VBAエディタ(Microsoft Visual Basic for Applications)を起動します。
3. メニューの [挿入] > [標準モジュール] をクリックします。
4. 真っ白なエディタ画面が開くので、先ほどのコードを丸ごと貼り付けます。
5. コード内の `sourceFolder` と `backupFolder` のパスをご自身の環境に合わせて書き換えます。
6. キーボードの [F5] キーを押すか、上部の再生ボタン(緑の三角)を押せば、一瞬で魔法のように仕分けが実行されます!
—
おわりに
お疲れ様でした!今回は、特定のキーワードを元にプレゼンテーションファイルを自動で仕分け・バックアップするスクリプトを解説しました。
このスクリプトをマスターすれば、応用として「バックアップと同時に古いファイルを削除する」「ファイル名の日付部分をチェックしてログに残す」といった、さらなる高度な業務自動化への扉が開かれます。
「手作業でファイルをポチポチ探していたあの時間は何だったんだ…!」という感動を、ぜひご自身の業務で味わってみてください。あなたのエンジニアライフの第一歩を、心から応援しています!
