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))
配列の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で階層を変えた上でフォルダを一括作成する方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す