フォルダ作成マクロ ができるまで
はじめに
フォルダをいっぺんにたくさん作りたい時ってありますよね。
・・・よね?
右クリック→新規作成→フォルダーで作って名前変えて、とやればできるけど、いくつもやるのはめんどくさい。
そこでマクロの出番となります。
クリアすべきポイント
- 任意のフォルダを1つ作る
- 1を繰り返していっぱい作る
こんなところでしょうか。
任意のフォルダを1つ作る
「vba フォルダ作成」辺りで検索すると、
MkDir ("[フォルダのパス]")
でできることがわかります。
Sub test() MkDir ("C:¥VBAtest") End Sub
CドライブにVBAtestフォルダを作り、そこに色々作ることにしましょう。
イメージ
こんな感じでセルに入力して実行 → C:¥VBAtestの中にa,b,c,d,eのフォルダができると、いいんじゃなかろうか。
パスを取得
今回はMkDirにフォルダのパスを次々渡していけばいいわけなので、パスを文字列として表示できるようにします。
いつものようにfor文を使って
Sub test() Dim i As Long Dim maxRow As Long Dim rootPath As String, fldPath As String rootPath = Range("A1") maxRow = Cells(Rows.Count, 1).End(xlUp).Row For i = 3 To maxRow fldPath = rootPath & "¥" & Cells(i, 1) Debug.Print fldPath Next End Sub
で、
C:\VBAtest\a C:\VBAtest\b C:\VBAtest\c C:\VBAtest\d C:\VBAtest\e
イミディエイトウィンドウにパスが表示されます。
「VBAtest」と各サブフォルダの間に「¥」を入れるのを忘れると、面白いので、そこだけ注意。
慣れててもそういうことはよくあるので、一度「Debug.Print」が吉です。
いっぱい作る
Sub makeFolders() Dim i As Long Dim maxRow As Long Dim rootPath As String, fldPath As String rootPath = Range("A1") maxRow = Cells(Rows.Count, 1).End(xlUp).Row For i = 3 To maxRow fldPath = rootPath & "¥" & Cells(i, 1) MkDir fldPath Next End Sub
- Debug.Print を MkDir にして
- それっぽい名前に変えれば
完成です。(名前は別にtestのままでもよい)
ローカル ディスク(C:) └VBAtest └a └b └c └d └e
できたできた。
アンコール
もう一回やるとどうなるでしょう
怒られる
パス名が無効です
無効って・・・さっきはできたじゃん。
まあ、エラーの意味はよくわからんけど、原因はなんとなくわかりますね。
さっき作ったフォルダを消してから実行すれば、大丈夫なようです。
つまり、フォルダが既にある場合に「パス名が無効」と言われると。
改良しよう
「vba フォルダが存在するか確認」辺りで検索すると
Dir("[フォルダのパス]", vbDirectory)
で確認できることがわかります。
Sub makeFolders() Dim i As Long Dim maxRow As Long Dim rootPath As String, fldPath As String rootPath = Range("A1") maxRow = Cells(Rows.Count, 1).End(xlUp).Row For i = 3 To maxRow fldPath = rootPath & "¥" & Cells(i, 1) If Dir(fldPath, vbDirectory) = "" Then MkDir fldPath End If Next End Sub
こんなもんでしょうか。
まとめ
これだけの記述でこれだけのことができるなんて、なかなかお得ですね。
ただ、せっかくセルに作りたいフォルダを入力しても、一旦VBEに移って「実行」するのは冷めますな。
その辺りを考えるのは、また、別の話...