
動画でExcel VBAを使ってフォルダを大量に作る
動画版「マクロ講座2023年入門編EX5回」です。
フォルダを作成するには、FileSystemObjectという
ObjectのCreateFolder メソッド を使用します。
この FileSystemObject を使うときは、事前に参照設定から
Microsoft Scripting Runtimeを
参照できるようにチェックを入れておく必要があります。
Microsoft Scripting Runtimeを参照するケースで解説しています。
Visual Basic Editor を開いてもらって、[ツール]メニューから[参照設定]をクリックします。

すると[参照設定]ダイアログボックスがされますので Microsoft scripting runtime を探してチェックを入れてください。
以前に使ったことがある場合は比較的上の方にありますが、一度も使ったことがない場合は、アルファベット順ですので M の項目のところにありますからかなり下の方を探してください。

今回フォルダを作るのは、Dドライブです。Dドライブの中にフォルダを作ります。
最初に1つ作ります。
D:\SampleTestFolder
Sub CreateNewFolder()
Dim fso As FileSystemObject
Set fso = New FileSystemObject
fso.CreateFolder "D:\SampleTestFolder"
End Sub
実行すると、フォルダがひとつ作成されました。

次に、3個のフォルダを作成します。2番目のマクロを実行し、
NewTestFolder1,NewTestFolder2,NewTestFolder3
という名前で3つのフォルダを作成します。
Sub CreateMultipleFolders()
Dim fso As FileSystemObject
Set fso = New FileSystemObject
fso.CreateFolder "D:\NewTestFolder1"
fso.CreateFolder "D:\NewTestFolder2"
fso.CreateFolder "D:\NewTestFolder3"
End Sub
3つ作成する場合のコードも、1つ作成する場合といっしょでした。
まず変数fso をAs FileSystemObject として宣言します。
次に、Set fso = New FileSystemObject と記述する(インスタンス化)ことで、fsoをオブジェクトとして操作できるようになります。

3回目は、Dドライブ直下のD:\SampleTestFolderフォルダの中にフォルダを3個つくります。
フォルダを指定するのに、Array関数を利用してフォルダ名を配列として扱っています。

Sub CreateMultipleFolders_array()
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Dim folder_paths(), path
folder_paths = Array("D:\SampleTestFolder\NewFolder1", _
"D:\SampleTestFolder\NewFolder2", _
"D:\SampleTestFolder\NewFolder3")
For Each path In folder_paths
fso.CreateFolder path
Next path
End Sub
Dim fso As FileSystemObject
変数 fso をAs FileSystemObject として使いますと宣言。
Set fso = New FileSystemObject
fso はオブジェクトなので、 New FileSystemObjectとして Setすることにより実体を持ちます。
インスタンス化です。
Dim folder_paths(), path
変数としてfolder_paths() カッコ付、つまり配列です。
path はバリアントです。
folder_paths = Array("D:\SampleTestFolder\NewFolder1", _
"D:\SampleTestFolder\NewFolder2", _
"D:\SampleTestFolder\NewFolder3")
folder_paths フォルダパスにArrayを使ってフォルダ名を指定します。
配列といっても一次元ですから、名前をそのままフルパスで列挙しただけです。
あとは For Each Next構文で回します。
For Each path In folder_paths
fso.CreateFolder path
Next path
大量にフォルダを作る場合、上記のコードの記述ではコードが長くなって大変です。
こんどはフォルダ名をシートにリスト化して大量生産するマクロコードです。
A列にフォルダ名をリスト化してあるので、それを利用します。

また、フォルダのパスは、
Dim path As String: path = "D:\NewTestFolder1\"
として、コード内で指定します。
最終行は、今回はA1から下に降りる形で書いてます。
Range( "A1" ). End (xlDown).Row
下から上に上がる形でしたら、Cells(Rows.Count, 1).End(xlUp).Row
のように一番下からでもいいですし、
.Range("A5000").End(xlUp).Row
のように書いても最終行は取得できます。
Dim i As Long
For i = 1 To Sheet1.Range( "A1" ). End (xlDown).Row
fso.CreateFolder path & Range("A" & i).Value
Next i
For文で回してファイル名を使って、
fso.CreateFolderメソッドで、引数の名前に
path & Range("A" & i).Valueを使います。
実行すると、DドライブのNewTestFolder1の中に20個の名前のフォルダが作成されています。
