VBAでフォルダを自動作成する方法 | 月別・案件別の一括作成マクロ

VBAを使えば、毎回手作業で作っていた業務用フォルダを、Excelからボタン1つで一括作成できます。新年度・新プロジェクトのたびに「請求書」「報告書」「打ち合わせ資料」などのフォルダを作る手間を、マクロで自動化しましょう。

この記事では、次の内容を順番に解説します。

  • フォルダを作成・確認する基本の命令(MkDir・Dir)
  • 決まった構成のフォルダをまとめて作成するコード
  • 月別・案件別フォルダを入れ子で一括作成する方法
  • Excelのセルからフォルダ名を読み込む応用パターン

フォルダを自動作成するには?

VBAでフォルダを作成するには MkDir(Make Directory)命令を使います。ただし、すでに存在するフォルダに対して MkDir を実行するとエラーになります。そのため、Dir 関数で事前に存在確認してから作成するのが基本の書き方です。

命令・関数役割
MkDirフォルダを新規作成するMkDir "C:¥作業フォルダ"
Dir(パス, vbDirectory)フォルダの存在を確認する(空文字なら未存在)Dir("C:¥作業フォルダ", vbDirectory)
Environ("USERPROFILE")ユーザーのプロファイルフォルダパスを取得するEnviron("USERPROFILE") & "¥Desktop"

Environ(“USERPROFILE”) を使う理由:ユーザー名を直接パスに書いてしまうと、別のパソコンでは動かなくなります。Environ("USERPROFILE") を使うことで、そのパソコンのユーザー名に自動対応できるため、チームで共有するマクロには必ず使う習慣にしましょう。

決まった構成のフォルダをまとめて作成するには?

毎回使うフォルダ名が決まっている場合は、配列にリストアップして For Each でまとめて作成するのがシンプルです。以下のコードはデスクトップに「業務準備」フォルダを作り、その中によく使う5つのサブフォルダを一括作成します。

Sub CreateFolderStructure()

    Dim basePath As String
    Dim fList    As Variant
    Dim f        As Variant

    '作成先のパスを指定(デスクトップに「業務準備」フォルダを作る)
    basePath = Environ("USERPROFILE") & "¥Desktop¥業務準備"

    '作成先のベースフォルダがなければ作成
    If Dir(basePath, vbDirectory) = "" Then MkDir basePath

    '作成するサブフォルダの一覧
    fList = Array("請求書", "見積書", "契約書", "打ち合わせ資料", "納品書")

    '各フォルダを順に作成(すでにある場合はスキップ)
    For Each f In fList
        If Dir(basePath & "¥" & f, vbDirectory) = "" Then
            MkDir basePath & "¥" & f
        End If
    Next f

    MsgBox "フォルダ構成の作成が完了しました。"

End Sub

実行すると、デスクトップに以下の構成が作られます。フォルダがすでに存在している場合は上書きせずスキップするため、二重作成のエラーも起きません。

Desktop¥
└── 業務準備¥
    ├── 請求書
    ├── 見積書
    ├── 契約書
    ├── 打ち合わせ資料
    └── 納品書

月別フォルダの中にサブフォルダを一括作成するには?

毎月発生する業務フォルダを作りたい場合は、ループの外側にもう一段ループを追加します。以下は「1月〜12月」のフォルダを作り、その中にさらに定型のサブフォルダを作成する例です。

Sub CreateMonthlyFolders()

    Dim basePath    As String
    Dim monthFolder As String
    Dim subList     As Variant
    Dim i           As Integer
    Dim s           As Variant

    basePath = Environ("USERPROFILE") & "¥Desktop¥2026年度業務"

    '親フォルダがなければ作成
    If Dir(basePath, vbDirectory) = "" Then MkDir basePath

    subList = Array("資料", "請求書", "報告書")

    '1月〜12月のフォルダを作成
    For i = 1 To 12
        monthFolder = basePath & "¥" & i & "月"
        If Dir(monthFolder, vbDirectory) = "" Then MkDir monthFolder

        'その月の中にサブフォルダを作成
        For Each s In subList
            If Dir(monthFolder & "¥" & s, vbDirectory) = "" Then
                MkDir monthFolder & "¥" & s
            End If
        Next s
    Next i

    MsgBox "月別フォルダの作成が完了しました。"

End Sub

実行結果のイメージです。

Desktop¥
└── 2026年度業務¥
    ├── 1月¥
    │   ├── 資料
    │   ├── 請求書
    │   └── 報告書
    ├── 2月¥
    │   ├── 資料
    │   ├── 請求書
    │   └── 報告書
    └── …(3月〜12月も同様)

Excelのセルからフォルダ名を読み込んで作成するには?

フォルダ名が都度変わる場合(担当者名・案件名など)は、Excelのシートにリストを用意しておいて、そこから読み込む方法が便利です。追加・変更もシートを編集するだけで対応でき、コードを触らずに運用できます。

Sub CreateFoldersFromSheet()

    Dim basePath   As String
    Dim ws         As Worksheet
    Dim i          As Integer
    Dim folderName As String

    basePath = Environ("USERPROFILE") & "¥Desktop¥案件フォルダ"
    If Dir(basePath, vbDirectory) = "" Then MkDir basePath

    Set ws = ThisWorkbook.Sheets("フォルダリスト")

    'A列の2行目から空白になるまで読み込む
    i = 2
    Do While ws.Cells(i, 1).Value <> ""
        folderName = ws.Cells(i, 1).Value
        If Dir(basePath & "¥" & folderName, vbDirectory) = "" Then
            MkDir basePath & "¥" & folderName
        End If
        i = i + 1
    Loop

    MsgBox "フォルダの作成が完了しました。"

End Sub

「フォルダリスト」シートのA列に作成したいフォルダ名を入力しておくだけで動きます。フォルダの追加・変更はシートを編集するだけで対応できるため、マクロの中身を触らずに運用できます。

まとめ

  • MkDir でフォルダを作成し、Dir で事前に存在確認してスキップ処理を入れるのが基本
  • Environ("USERPROFILE") を使うとパソコンが変わっても動く汎用マクロになる
  • 配列にフォルダ名をリスト化して For Each でまとめて作成するとコードがシンプルにまとまる
  • 二重ループで月別・案件別の入れ子フォルダ構成も一括作成できる
  • Excelのセルからフォルダ名を読み込むと、シートを編集するだけで対応できる柔軟な運用ができる

よくある質問

フォルダがすでにある場合、エラーになりませんか?

MkDir は既存フォルダに対して実行するとエラーになります。そのため、実行前に Dir(パス, vbDirectory) = "" で存在確認し、空文字(フォルダなし)のときだけ作成するコードにするのが基本です。この記事のサンプルはすべてその処理を含んでいます。

フォルダ名に使えない文字はありますか?

Windowsのフォルダ名には ¥ / : * ? " < > | の8文字が使えません。Excelのセルから読み込む場合は、これらの文字が含まれていないか事前にチェックする処理を加えると安心です。InStr(folderName, "/") などで確認できます。

Dドライブや任意のフォルダに作成したい場合はどうすればいいですか?

コードの冒頭にある保存先のパスを書き換えるだけで対応できます。たとえばDドライブに作りたい場合は "D:¥業務準備" のように変更してください。デスクトップ以外の場所(ドキュメントフォルダなど)に作りたい場合も、パスを書き換えるだけで動きます。

作成したフォルダはどこで確認できますか?

マクロ実行後にエクスプローラーを開き、指定したパスのフォルダを確認してください。デスクトップに作成した場合はそのままデスクトップに表示されます。「本当に作成されたか不安」という場合は、コードの最後にある MsgBox のメッセージが表示されれば正常に完了しています。

マクロを実行しても何も起きません。原因は何ですか?

よくある原因は、パスの区切り文字が全角の「¥」になっているケースです。VBAのパスには半角の ¥(バックスラッシュ)を使う必要があります。まず MsgBox でパスの内容を表示して確認してみてください。また、指定したドライブへのアクセス権がない場合もエラーなく終了することがあります。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール