【Excel VBA】複数の階層にフォルダを一括作成する方法!

VBAで複数の階層にフォルダを一括作成したいときはないでしょうか。

けど、そんな中で悩むことは、

・VBAで複数の階層にフォルダを一括作成したいが方法がよくわからない
・VBAで階層を増やしたり減らしたりしてフォルダを一括作成したいが方法がよくわからない

ですよね。

今回はそんなお悩みを解決する

・VBAで複数の階層にフォルダを一括作成する方法
・VBAで階層を変えた上でフォルダを一括作成する方法

についてまとめます!

VBAで複数の階層にフォルダを一括作成するイメージ

VBAで複数の階層にフォルダを一括作成するイメージについて説明をします。

まず1シート目のA列を1層目、B列を2層目、3列を3層目とし、それぞれフォルダ名を入力、

さらにE1セルにフォルダ作成先のパスを入力します。

VBAを実行すると、

指定パスに多層構造のフォルダが作成されます。

さらにExcel側の階層を増やし、VBAを実行すると、

追加した階層も含めて多層構造のフォルダが作成されます!

深い階層のフォルダを大量に作らなければならない場合に便利ですね!

それでは早速試してみましょう。

VBAで複数の階層にフォルダを一括作成する方法

VBAで複数の階層にフォルダを一括作成するについて説明をします。

サンプルのシートとフォルダを準備する

まずは対象となるシートを準備しましょう。
サンプルでは以下のよう1シート目のA列を1層目、B列を2層目、3列を3層目とし、それぞれフォルダ名を入力し、

E1セルにフォルダ作成先のパスを入力します。

続いてフォルダ作成先のフォルダを作成します。
サンプルでは「F:\フォルダ作成テスト」としています。

VBAコード

サンプルのVBAコードは以下の通りです。

Sub 複数階層のフォルダを指定パスへ作成()
    Dim objWB As ThisWorkbook
    Dim objSheet As Object
    Dim i As Long
    Dim j As Long
    Dim intKaisou As Integer
    Dim strPass As String
    Dim strFolderPass As String
    Dim arrTemp As Variant

    '何階層目まで作成するか指定します。
    intKaisou = 3

    'Excelのブックとワークシートのオブジェクトを設定します。
    Set objWB = ThisWorkbook
     '1シート目のシートを対象にします。
    Set objSheet = objWB.Sheets(1)

    With objSheet
        
        'フォルダ作成先のパスを取得し、変数へ代入します。
        strPass = .Range("E1").Value

        'フォルダ作成先のパスを取得し、変数へ代入します。
        strFolderPass = strPass
        
        'A2セルから最終行まで処理を繰り返します。
        For i = 2 To .Cells(1, 1).End(xlDown).Row

            'フォルダ名の値がある場合のみ処理をします。
            If .Cells(i, 1) <> "" Then
                
                '各階層のフォルダ名を配列に格納します。
                arrTemp = Range(Cells(i, 1), Cells(i, intKaisou))
                
                '配列の1番目から最終番目まで処理を繰り返します。
                For j = 1 To UBound(arrTemp, 2)
                    strFolderPass = strFolderPass & "\" & arrTemp(1, j)
                    'フォルダがない場合のみフォルダ作成します。
                    If Dir(strFolderPass, vbDirectory) = "" Then
                        'フォルダを作成します。
                        MkDir strFolderPass
                    End If
                Next j
                'パス格納変数を初期化します。
                strFolderPass = strPass
             End If
        Next i
        
        MsgBox "フォルダの作成が完了しました!"
    End With
    
    'オブジェクトを解放します。
    Set objWB = Nothing
    Set objSheet = Nothing
    
 End Sub

VBAを設定する

何階層目まで作成するか指定します。今回は3階層までとしていますので3を指定します。

intKaisou = 3

1シート目のシートを対象にします。2シート名にする場合は2を、シート名を指定したい場合は”<シート名>”を入力してください。

Set objSheet = objWB.Sheets(1)

フォルダ作成先のパスを指定します。

strPass = .Range("E1").Value

A2セルから最終行まで処理を繰り返します。A列以外をキーにする場合はCellsの列番号を変えてください。

For i = 2 To .Cells(1, 1).End(xlDown).Row

VBAの実装

VBAの実装方法については
VBAの実装手順
をご参照ください。

VBAを実行する

VBAを実行してみましょう。

Excelの表に沿った多層構造のフォルダが作成されましたね!

階層を増やしフォルダを一括作成する

続いて、複数の複数の階層にフォルダを一括作成してみましょう。

サンプルでは1シート目のD列に4階層目の項目とフォルダ名を追記し、フォルダ作成先のパスをE1セルへ移動しています。

以下のコードを変更します。

階層を3階層から4階層に変更しますので、4を指定します。
■変更前

intKaisou = 3

■変更後

intKaisou = 4

作成先のパスをF1セルに変更します。
■変更前

strPass = .Range("E1").Value

■変更後

strPass = .Range("F1").Value

VBAを実行してみましょう。

はい、追加した4階層目のフォルダも作成されましたね!

VBAの説明

VBAについて説明をします。

Excelのブックとワークシートのオブジェクトを設定します。

Set objWB = ThisWorkbook

1シート目のシートを対象にします。

Set objSheet = objWB.Sheets(1)

フォルダ作成先のパスを取得し、変数へ代入します。

strPass = .Range("E1").Value

A2セルから最終行まで処理を繰り返します。

For i = 2 To .Cells(1, 1).End(xlDown).Row

フォルダ名の値がある場合のみ処理をします。

If .Cells(i, 1) <> "" Then

各階層のフォルダ名を配列に格納します。

arrTemp = Range(Cells(i, 1), Cells(i, intKaisou))

タカヒロ

タカヒロ
Rangeプロパティに範囲指定し、変数に代入すると二次元配列としてデータが一気に格納されるExcel VBA技を利用しています。

配列の1番目から最終番目まで処理を繰り返します。

For j = 1 To UBound(arrTemp, 2)

変数にディレクトリ(多層フォルダ)パスを代入します。

strFolderPass = strFolderPass & "\" & arrTemp(1, j)

フォルダがない場合のみフォルダ作成します。

If Dir(strFolderPass, vbDirectory) = "" Then

フォルダを作成します。

MkDir strFolderPass

ディレクトリパス格納変数を初期化します。

strFolderPass = strPass

オブジェクトを解放します。

Set objWB = Nothing Set objSheet = Nothing

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・VBAで複数の階層にフォルダを一括作成する方法
・VBAで階層を変えた上でフォルダを一括作成する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。




タカヒロ

プログラミングやマーケティングなどに興味あるけど
どのスクールが良いか悩むときはないですか?

タカヒロもスクール選びにとても苦労しました…

そんな時には数ある中から第三者目線でいまの貴方に合ったスクールを提案してくれるスクマドのカウンセリングサービスがおすすめです。

メリットだけでなくディメリットもズバリと伝えてくれます!

これでお悩み時間を短縮できますね!詳細は☟になります。

※完全無料です。ご安心ください。





コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です