この記事では、EXCELでフォルダを一気に大量に作成する方法について説明しています。
一度EXCELに作成したいフォルダリストを入力しておけば、何度でもフォルダを作成することができます。
しかも、作成するベースフォルダを変えて実行すれば、同じ階層のフォルダを何度でも作ることができます。
フォルダを1つ1つ間違わずに作るのって、結構時間もかかるし、ストレスが発生します。
それでは、EXCELで指定したフォルダリストをもとに、大量のフォルダを作成していきましょう。
困っている女性
困っている女性
困っている女性
解決する男性
困っている女性
◆似たような作業で、フォルダ一覧を取得する方法については、以下の記事を参照してください。
【EXCEL:VBA】指定したフォルダに存在するファイル一覧を取得したい
フォルダ作成ツールに必要なものを、1つ1つ順番に説明していきます。
もくじ
1.ベースフォルダ指定欄、フォルダリスト入力欄を準備する
まず、ベースとなるフォルダを指定する欄とそのベースフォルダの下に作成したいフォルダリストを書き込む欄を作成します。
「ファイル作成」シートを作成する
- 「フォルダ作成」という名前のシートを作成します。
- 1行目に「ベースフォルダ」のタイトル行を作成します。
- 2行目に「ベースフォルダ」を入力する欄を作成します。
- 3行目に「NO」、「フォルダ名」のタイトル行を作成します。
- 4行目以降は、作成したいフォルダリストを書き込む欄になります。
4行目以降の「NO」、「フォルダ名」は作成したいフォルダを入力していきましょう。
2.VBAでフォルダを作成する機能を記入する
「Microsoft Visual Basic for Applications」を起動します。
標準モジュールを追加して、以下のソースを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
Public Sub MainProc() Dim sht As Worksheet Dim fso As Object Dim baseFld As String Dim tmpFld As String Dim flds() As String Dim nowRow As Long Dim i As Integer '①参照するシートを変数に格納する Set sht = ThisWorkbook.Sheets("フォルダ作成") '②ベースフォルダを変数に格納する baseFld = sht.Range("A2") '③FileSystemObjectを変数に格納する Set fso = CreateObject("Scripting.FileSystemObject") nowRow = 3 Do While True '④現在行を次の行に変更する nowRow = nowRow + 1 '⑤NO列が空なら処理を抜ける If sht.Range("A" & nowRow) = "" Then Exit Do End If '⑥作成対象フォルダパスを\マーク毎に分割して配列に格納する flds = Split(sht.Range("B" & nowRow), "\") tmpFld = baseFld For i = 0 To UBound(flds) '⑦フォルダパス文字列を上位階層から作成する tmpFld = tmpFld & "\" & flds(i) '⑧フォルダが存在しないかチェックする If fso.FolderExists(tmpFld) = False Then '⑨フォルダを作成する fso.CreateFolder (tmpFld) End If Next Loop '⑩FileSystemObjectをクリアする Set fso = Nothing MsgBox "完了" End Sub |
最後にEXCELを「◯◯◯.xlsm」というような感じでマクロ有効ブック形式で保存します。
3.フォルダを作成する機能の使い方
それでは、フォルダを大量に作成する方法を説明します。
まず、A2セルにベースとなるフォルダパスを入力します。
次に、4行目以降にNOとフォルダ名を入力します。
NO列が入力されている行までを対象として、フォルダ作成しますので、連番でもなんでもいいので入力してください。
フォルダ名に入力したフォルダは、ベースフォルダで指定したフォルダ配下に作成します。
次に、「開発」タブの「マクロ」をクリックします。
先程作成した自作関数「MainProc」が一覧に表示されていますので、選択します。
次に、「実行」ボタンをクリックしてフォルダを作成します。
しばらく待つと、ベースフォルダ配下に、4行目以降に入力したフォルダが作成されます。
4.フォルダを作成するVBAプログラムの説明
それでは、VBAプログラムを説明します。
①参照するシートを変数に格納する
1 2 |
'①参照するシートを変数に格納する Set sht = ThisWorkbook.Sheets("フォルダ作成") |
そうすることにより、入力するプログラムを短くすることができるからです。
何度も「ThisWorkbook.Sheets(“フォルダ作成”)」と入力するより、「sht」と入力するほうが少なくてすむからです。
②ベースフォルダを変数に格納する
1 2 |
'②ベースフォルダを変数に格納する baseFld = sht.Range("A2") |
このあとの処理で、何度もベースフォルダを使うからです。
③FileSystemObjectを変数に格納する
1 2 3 4 5 6 |
'③FileSystemObjectを変数に格納する Set fso = CreateObject("Scripting.FileSystemObject") nowRow = 4 For Each f In fso.GetFolder(sht.Range("A2")).Files |
「FileSystemObject」はファイル操作やフォルダ操作をVBAで行うときに大変お世話になる便利なライブラリです、覚えておくと良いです。
④現在行を次の行に変更する
1 2 |
'④現在行を次の行に変更する nowRow = nowRow + 1 |
ループ処理の外側で、変数「nowRow」には3が格納されています。
フォルダ一覧は、4行目から入力するので、ループ処理の内側に入ったときに変数「nowRow」を+1して、4を格納します。
もちろん、ループしてくると、さらに+1されて5が格納されます。
というように、4行目以降のフォルダ名を取得します。
⑤NO列が空なら処理を抜ける
1 2 3 4 |
'⑤NO列が空なら処理を抜ける If sht.Range("A" & nowRow) = "" Then Exit Do End If |
変数「nowRow」に4が格納されている場合、セルA4に値が入力されているかチェックします。
A列に値が入力されていない行まで上から順次チェックしていき、空のA列が見つかるとフォルダ作成処理を終わらせます。
⑥作成対象フォルダパスを\マーク毎に分割して配列に格納する
1 2 |
'⑥作成対象フォルダパスを\マーク毎に分割して配列に格納する flds = Split(sht.Range("B" & nowRow), "\") |
このあとのフォルダ作成で、上位階層のフォルダを1つ1つ指定する必要があるためです。
※上記では「\」になっていますが、正しくは半角の「¥」です、ご注意ください。
⑦フォルダパス文字列を上位階層から作成する
1 2 |
'⑦フォルダパス文字列を上位階層から作成する tmpFld = tmpFld & "\" & flds(i) |
⑧フォルダが存在しないかチェックする
1 2 |
'⑧フォルダが存在しないかチェックする If fso.FolderExists(tmpFld) = False Then |
「fso.FolderExists」にフォルダパスを渡すと、フォルダが既に存在する場合TRUEを、フォルダが存在しない場合FALSEを返してきます。
すでに存在するフォルダを作成する必要はないからです。
⑨フォルダを作成する
1 2 |
'⑨フォルダを作成する fso.CreateFolder (tmpFld) |
変数「tmpFld」に格納されているフォルダパスを作成します。
⑩FileSystemObjectをクリアする
1 2 |
'⑩FileSystemObjectをクリアする Set fso = Nothing |
それでは、フォルダ作成するツールを作って、作業を効率化してみましょう。
以上です。
最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。