
マクロで別名保存したファイルを格納するフォルダを作りたいんだけど、
同じくマクロでフォルダを作成できるの?

なるほど…。
では今回は、「フォルダを作成するマクロ(VBA)」を
VBAマクロ歴3年の私が、できるだけわかりやすく解説
いたします。
フォルダを作成する方法(VBAマクロ)
「MkDir」を使います。
まずは実行見本をどうぞ。
実行見本
ひとまず全コードと実行結果をご覧ください。
解説は後ほど行います。
全コード
Sub フォルダを作成()
MkDir "C:\Utatane\test"
End Sub
実行結果

解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
プロシージャの作成
Sub フォルダを作成()
End Sub
プロシージャなど、マクロの基礎は下記記事でわかりやすく解説しております。
コードだけではなく、開発タブの表示からマクロの保存まで知りたい方はご参考ください。
フォルダ作成
MkDir "C:\Utatane\test"
上記コードにて、フォルダを作成しております。
「MkDir」を書いたら半角スペースを入れ、「フォルダパス」を書いて完了です。
今回の場合は、「test」というフォルダを作成した例です。
どこに作成するのかというと、「Cドライブ」の中の「Utataneフォルダ」の中に作成するという指定です。

しかしながら、下記のような場合にはエラーが発生します。
- 親フォルダが存在しない場合(Utataneフォルダが親フォルダ)
- 子フォルダが既に存在する場合(作成するtestフォルダが子フォルダ)
- フォルダ名が不正な場合(長さ、使っている文字)

では具体的に、エラーが発生した失敗例を見ていきましょう。
失敗例とエラー内容
Sub フォルダの作成失敗例1()
MkDir "C:\Utataneeeeee\test"
End Sub
上記VBAコードを実行することで、下図のエラーが発生しました。

これは1つ目の「親フォルダが存在しない場合」に該当します(親フォルダ指定間違い)

- 実際の親フォルダ:Utatane
- 指定の親フォルダ:Utataneeeeee
親フォルダの指定が間違ったため、存在しないフォルダと認識されたようです。
このエラーの回避方法は、次項「エラー回避方法」で紹介いたします。
続いて、下記のVBAコードを見てください。
Sub フォルダの作成失敗例2()
MkDir "C:\Utatane\test"
End Sub
これを実行したところ、下図のエラーが発生しました。

1つ目とエラー内容が似ていますね…。
今回は「Utatane」フォルダの中に「test」フォルダが既にあったため、エラーが発生しておりました。
すなわち2つ目の「子フォルダが既に存在する場合」に該当します。
エラー内容から原因を特定できそうでできないのが歯がゆいですね…。
こちらも回避方法は、次項「エラー回避方法」で紹介いたします。
最後に3つ目のエラー「フォルダ名が不正な場合」についてです。
作成するフォルダ名が、下記に該当するとエラーが発生します。
- フォルダ名の長さが、260文字を超える場合
- フォルダ名に「\ / : * ? ” < > |」が含まれる場合
260文字を超えるような長い名前をつけることはめったにないと思いますので無視して大丈夫です。
しかしながら、スラッシュなどの記号は使ってしまうことがあるかと思います。
使ってはいけない記号を覚えておくか、フォルダ名は文字だけにするように心がけましょう。
エラー回避方法
前項で軽く触れた「エラー」につきまして、
初心者でも簡単にできる回避方法を紹介いたします。
まずは、「1.親フォルダが存在しない場合」のエラー回避方法です。
【親フォルダが存在しない場合】のエラー回避方法
下記のVBAコードを見てください。
Sub 親フォルダの存在を確認してから作成()
Dim parentFolderPath As String
parentFolderPath = "C:\Utatane"
If Dir(parentFolderPath, vbDirectory) = "" Then
MkDir parentFolderPath
End If
MkDir "C:\Utatane\test"
End Sub
親フォルダが存在しない場合でも、親フォルダと子フォルダを一括で作成できるように改良した例です。
【コード3行目】
親フォルダのパスを変数「parentFolderPath」に格納
【コード5~7行目】
Dirで親フォルダを探しています。
そしてIfを使った条件分岐で、親フォルダが存在しなければ作成、存在する場合はスキップさせています。
【コード8行目】
子フォルダを作成しています。
親フォルダが存在しない場合は、コード6行目で親フォルダが作成されるため、エラーは出ません。
DirやIf文については下記記事でわかりやすく解説しております。ご参考ください。
次は、「2.子フォルダが既に存在する場合」のエラー回避方法です。
【子フォルダが既に存在する場合】のエラー回避方法
下記VBAコードを見てください。
Sub 子フォルダが存在しない場合のみ作成()
Dim folderPath As String
folderPath = "C:\Utatane\test"
If Dir(folderPath, vbDirectory) = "" Then
MkDir folderPath
End If
End Sub
1つ目と似ていますが、こちらの方がシンプルです。
今回は親フォルダを探すのではなく、子フォルダを探しています。
子フォルダが存在しなければ子フォルダを作成し、存在していればスキップしています。
うまく動作しないときの対処法
エラーが発生する
コンパイルエラー・実行時エラー
コードに問題がある場合が多いです。
「”」や()など、2つセットの記号が片方だけになっていないかなど、コードを再確認しましょう。
セル名を「”」で囲っていない場合でもエラーが発生します。
また今回の場合は、作成するフォルダが既に存在していたり、逆に親フォルダが存在しない場合はエラーが発生します。実際のフォルダやコードのパスを確認するか、前項を参考にエラー回避を試みてください。
警告表示

上記の表示が出た場合は、マクロが無効になっています。
エクセルに表示された「コンテンツの有効化」をクリックするか、下記記事を参考にセキュリティ設定を変更してください。
最後に
VBAでフォルダを作成するマクロを紹介・解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!