和風スパゲティのレシピ

日本語でコーディングするExcelVBA

フォルダを作成する - MkDirステートメント

フォルダを作成するMkDirステートメントを解説します。

基本形

MkDir 作りたいフォルダのフルパス

実行例

' デスクトップに「テスト」フォルダを作成
MkDir C:\Users\○○\Desktop\テスト

' マクロを実行したブックと同じフォルダに「バックアップ」フォルダを作成
MkDir Thisworkbook.Path & "\バックアップ"

解説

フォルダを作成する場合は、MkDirステートメントを使用します。


基本形、実行例の通り、とても単純なステートメントで、
作りたいフォルダのパスを渡すと、そのフォルダを作成してくれます。


パスはすべて手打ちでももちろん動きますが、便利なパスの渡し方として、
WorkbookオブジェクトのPathプロパティが活用できます。

「あるブックと同じフォルダ」を簡単に指定できますので覚えておきましょう。


さてMkDirステートメントの構文自体は簡単なのですが、
注意しなければいけないエラーが2つありますので解説します。

すでに存在しているフォルダを指定できない

まず1つ目が、「すでにあるフォルダを指定するとエラー」になります。

「パス名が無効です。」エラー


「パス名が無効です。」というエラーで分かりづらいのも気を付けてください。


こちらは「フォルダがあるか判定するDir関数」を用いて、

Dim 保存フォルダパス As String
保存フォルダパス = ThisWorkbook.Path & "\出力フォルダ"

If Dir(保存フォルダパス, vbDirectory) = "" Then
    MkDir 保存フォルダパス
End If

このように「フォルダがなければフォルダを作成する」コードを書くことで対応します。

既にあるフォルダの中にしか作成できない

続いて2つ目が、既に存在しているフォルダの中にしか実行できない、
つまり、「深い階層まで一気に作ろうとするとエラー」になります。


例えば、まだ「商品」フォルダしかない段階で、

MkDir "C:\Users\○○\Desktop\商品\くだもの\柑橘\みかん"

このコードを実行するとエラーとなります。

「パスが見つかりません。」エラー


つまりMkDirステートメントは「1回で1フォルダしか作成できない」ということです。


よってこれを解決するには、

MkDir "C:\Users\○○\Desktop\商品\くだもの"
MkDir "C:\Users\○○\Desktop\商品\くだもの\柑橘"
MkDir "C:\Users\○○\Desktop\商品\くだもの\柑橘\みかん"

このように上の階層から順に作成していく必要があります。


ただし、前述の通りMkDirは「既にあるフォルダ」を指定してもエラーになるため、

MkDir "C:\Users\○○\Desktop\商品"

これは書いてはいけないというのも面倒なポイントですね。


このエラー対策を完璧に行おうと思ったら、
"\"ごとにパスを区切り、MkDirを繰り返し実行するループ処理
を書く必要があります。

このコードについてはこちらの記事を参考にしてください。

www.limecode.jp




以上でフォルダを作成する「MkDirステートメント」の解説を終わります。


このステートメントを使ったサンプルコードは以下のようなものがありますので、
必要な処理がありましたら、本記事とあわせてお持ち帰りください。
www.limecode.jp
www.limecode.jp