ファイルを保存する前に「保存先のフォルダがない」と気づくことはよくあります。
マクロでファイルを出力する処理を組んだとしても、保存先のフォルダが存在しなければ、エラーになってしまいます。
このようなときに便利なのが、フォルダがなければ自動で作成するマクロです。処理の中であらかじめフォルダの存在を確認し、なければ作成することで、スムーズな自動化が可能になります。
今回はその実装方法とメリットについて紹介します。
フォルダがなければ作成する基本のコード
次のコードでは、指定したパスにフォルダが存在しない場合に、自動でフォルダを作成します。
Sub CreateFolderIfNotExists()
Dim fso As Object
Dim folderPath As String
folderPath = "C:¥Test¥Output¥" ' 作成したいフォルダのパス
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists(folderPath) = False Then
fso.CreateFolder folderPath
End If
MsgBox "処理が完了しました。", vbInformation
End Sub
このコードでは Scripting.FileSystemObject を使い、FolderExists 関数で存在チェックを行っています。
フォルダが存在しなければ、CreateFolder メソッドで新しく作成されます。
コメントの要点
FolderExistsで存在確認CreateFolderで新規作成- 必要なときだけ作成される安全な構造
実装するメリット
このマクロを導入することで、次のような効果があります。
- 出力エラーを事前に防げる
- フォルダの存在確認を自動化できる
- 一度実行すれば再確認の必要がない
- ファイルの出力処理とセットで使える
特に「月ごとのフォルダにレポートを保存したい」「ユーザー別にフォルダを作りたい」といった処理では、事前に手作業でフォルダを準備する手間がなくなり、業務の自動化がより現実的になります。
応用パターンも柔軟に対応可能
たとえば、日付ごとのフォルダ名を自動で作ることも可能です。次のように Format 関数を使えば、日付入りのフォルダを生成できます。
folderPath = "C:¥Test¥" & Format(Date, "yyyymmdd") & "¥"
また、サブフォルダが連続して存在しない場合でも CreateFolder は一段階ずつ作成してくれるので、深い階層でも安心して使用できます。
まとめ
フォルダの存在チェックと自動作成は、ファイル出力処理の基本的な安全対策です。マクロで安定して動作させるために、あらかじめフォルダの準備まで含めておくと、より実務で使いやすくなります。
Scripting.FileSystemObjectを使って、フォルダの存在をチェックFolderExists→CreateFolderの流れで安全に作成- 日付やユーザーごとのサブフォルダも自動で対応可能
- 出力エラーを防ぎ、完全な自動化を実現できる
ファイル保存に関わる処理を組むときは、ぜひこのマクロもセットで活用してみてください。
