FSO【FileSystemObject】を使ってフォルダを大量に作る
動画でExcel VBAを使ってフォルダを大量に作る
FSO【FileSystemObject】を使ってフォルダを大量に作る
動画版「マクロ講座2023年入門編EX5回」です。
フォルダを作成するには、FileSystemObjectという
ObjectのCreateFolder メソッド を使用します。
この FileSystemObject を使うときは、事前に参照設定から
Microsoft Scripting Runtimeを
参照できるようにチェックを入れておく必要があります。
マクロ動画 VBAを使ってフォルダを大量に作る
FSOでフォルダを作成する
-
Microsoft Scripting Runtimeを参照するケースで解説しています。
Visual Basic Editor を開いてもらって、[ツール]メニューから[参照設定]をクリックします。 -
すると[参照設定]ダイアログボックスがされますので Microsoft scripting runtime を探してチェックを入れてください。
以前に使ったことがある場合は比較的上の方にありますが、一度も使ったことがない場合は、アルファベット順ですので M の項目のところにありますからかなり下の方を探してください。 -
今回フォルダを作るのは、Dドライブです。Dドライブの中にフォルダを作ります。 最初に1つ作ります。
D:\SampleTestFolderSub 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個の名前のフォルダが作成されています。