VBAのFSO”FileSystemObject”を使ってフォルダを大量に作る05回

FSO【FileSystemObject】を使ってフォルダを大量に作る

VBAマクロ講座 動画編 05回
マクロ講座

動画でExcel VBAを使ってフォルダを大量に作る

FSO【FileSystemObject】を使ってフォルダを大量に作る

動画版「マクロ講座2023年入門編EX5回」です。
フォルダを作成するには、FileSystemObjectという ObjectのCreateFolder メソッド を使用します。
この FileSystemObject を使うときは、事前に参照設定から Microsoft Scripting Runtimeを 参照できるようにチェックを入れておく必要があります。

マクロ動画 VBAを使ってフォルダを大量に作る

FSOでフォルダを作成する

  1. Microsoft Scripting Runtimeを参照するケースで解説しています。
    Visual Basic Editor を開いてもらって、[ツール]メニューから[参照設定]をクリックします。

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

    Microsoft scripting runtime を探す
  3. 今回フォルダを作るのは、Dドライブです。Dドライブの中にフォルダを作ります。 最初に1つ作ります。
    D:\SampleTestFolder

    Sub CreateNewFolder()
        Dim fso As FileSystemObject
        Set fso = New FileSystemObject
        fso.CreateFolder "D:\SampleTestFolder"
    End Sub

    マクロ実行前

    実行すると、フォルダがひとつ作成されました。

    マクロ実行後フォルダが作成された
  4. 次に、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
    
  5. 3つ作成する場合のコードも、1つ作成する場合といっしょでした。
    まず変数fso をAs FileSystemObject として宣言します。
    次に、Set fso = New FileSystemObject と記述する(インスタンス化)ことで、fsoをオブジェクトとして操作できるようになります。

    マクロ実行後フォルダが3つ作成された

シート名を配列に入れてフォルダを作成

  1. 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
    
  2. 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

シートに作成したフォルダ名をリスト化しその名前でフォルダを作成

  1. 大量にフォルダを作る場合、上記のコードの記述ではコードが長くなって大変です。
    こんどはフォルダ名をシートにリスト化して大量生産するマクロコードです。
    A列にフォルダ名をリスト化してあるので、それを利用します。

    作成したいフォルダ名をリスト化
  2. また、フォルダのパスは、
    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を使います。

  3. 実行すると、DドライブのNewTestFolder1の中に20個の名前のフォルダが作成されています。

    20個のフォルダが名前のリストから作成