フォルダを作成する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を繰り返し実行するループ処理」
を書く必要があります。
このコードについてはこちらの記事を参考にしてください。
以上でフォルダを作成する「MkDirステートメント」の解説を終わります。
このステートメントを使ったサンプルコードは以下のようなものがありますので、
必要な処理がありましたら、本記事とあわせてお持ち帰りください。
www.limecode.jp
www.limecode.jp