【Excel VBA】FSOでフォルダが存在しない場合に新規作成する方法 (FolderExists)

VBAマクロでファイルを特定のフォルダに保存したり、フォルダ内のファイルを読み込んだりする際、もし対象のフォルダが存在しなかったら、エラーが発生してマクロは停止してしまいます。

このようなエラーを未然に防ぐには、処理の実行前に**「フォルダが存在するか?」をチェックし、「もし存在しなければ、新しく作成する」**という処理を組み込むのが鉄則です。

FileSystemObject (FSO)を使えば、この一連のチェックと作成の処理を簡単に行うことができます。この記事では、そのための基本的なコードパターンを解説します。


目次

【準備】参照設定

FSOを快適に利用するため、VBAエディタでツール > 参照設定を開き、**「Microsoft Scripting Runtime」**にチェックを入れておくことを推奨します。


完成したVBAコード

以下は、このマクロが書かれているExcelファイルと同じ場所に、今日の日付の付いたサブフォルダ(例: Output_20250814)が存在するかをチェックし、なければ新規作成するVBAコードです。

'参照設定: Microsoft Scripting Runtime
Sub EnsureFolderExists()

    ' 変数を宣言します
    Dim fso As New FileSystemObject
    Dim targetFolderPath As String
    Dim folderObj As Folder

    '--- 1. 作成したいフォルダのパスを定義 ---
    targetFolderPath = ThisWorkbook.Path & "\Output_" & Format(Date, "yyyymmdd")

    '--- 2. FolderExistsメソッドで、フォルダの存在をチェック ---
    If fso.FolderExists(targetFolderPath) = False Then
        ' 存在しない場合
        '--- 3a. CreateFolderメソッドで、新しいフォルダを作成 ---
        Set folderObj = fso.CreateFolder(targetFolderPath)
        MsgBox "フォルダが存在しなかったため、新しく作成しました。" & vbCrLf & folderObj.Path
    Else
        ' 存在する場合
        '--- 3b. GetFolderメソッドで、既存のフォルダオブジェクトを取得 ---
        Set folderObj = fso.GetFolder(targetFolderPath)
        MsgBox "指定されたフォルダは既に存在します。" & vbCrLf & folderObj.Path
    End If
    
    ' オブジェクトを解放
    Set folderObj = Nothing
    Set fso = Nothing

End Sub

コードのポイント解説

① フォルダの存在を確認: .FolderExists

If fso.FolderExists(targetFolderPath) = False Then

fsoオブジェクトの.FolderExistsメソッドは、引数で指定したパスにフォルダが存在するかどうかを**True(存在する)またはFalse(存在しない)**のブール値で返します。このIf文で、フォルダの有無に応じた処理の分岐を行っています。

② フォルダを新規作成: .CreateFolder

Set folderObj = fso.CreateFolder(targetFolderPath)

フォルダが存在しなかった場合に、.CreateFolderメソッドを実行します。このメソッドは、指定したパスに新しいフォルダを作成し、その新しいFolderオブジェクトを戻り値として返します。

③ 既存のフォルダを取得: .GetFolder

Set folderObj = fso.GetFolder(targetFolderPath)

フォルダが既に存在していた場合は、.GetFolderメソッドでその既存のフォルダのオブジェクトを取得します。これにより、後続の処理(そのフォルダ内にファイルを保存するなど)をスムーズに行えます。


【応用】より実用的な関数にする

この「存在チェック → なければ作成」という処理は非常によく使うため、以下のような再利用可能なFunctionとしてまとめておくと大変便利です。

' 指定したパスのフォルダを確実に取得する関数(なければ作る)
Function GetOrCreateFolder(ByVal path As String) As Folder
    Dim fso As New FileSystemObject
    If Not fso.FolderExists(path) Then
        fso.CreateFolder path
    End If
    Set GetOrCreateFolder = fso.GetFolder(path)
End Function

' 関数の使い方
Sub TestFunction()
    Dim myFolder As Folder
    Set myFolder = GetOrCreateFolder(ThisWorkbook.Path & "\MyReports")
    MsgBox myFolder.Path & " の準備ができました。"
End Sub

まとめ

VBAでフォルダを扱う際の、エラーを防ぐための基本パターンは以下の通りです。

If Not fso.FolderExists("パス") Then fso.CreateFolder "パス"

ファイルを出力したり、読み込んだりするマクロの冒頭で、この一手間を加えるだけで、「指定したフォルダが見つかりません」という典型的な実行時エラーを回避でき、マクロの安定性が格段に向上します。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次