課題・悩み「階層化した複数のフォルダを一括で作成したい!けど、フォルダ作成に時間はかけたくない」
解決策「VBAマクロを使って、Excelから階層化したフォルダを一瞬で一気に作成する方法」を解説
フォルダはExcelとバッチファイルとコマンドプロンプトを使って、一括で作成する方法がありますが、ちょこっと複雑で面倒です。
そこで、Excelから階層化したフォルダを作成するVBAマクロを作成しました。
【VBAマクロを使って、Excelから階層化したフォルダを一瞬で一気に作成する方法】を図解で解説しています。
VBAマクロファイルを配布中。
以下のボタンよりダウンロードしてください。
階層化フォルダ一括作成VBAマクロファイルの使い方
階層化フォルダ一括作成VBAマクロファイルの使い方
- 作成したいフォルダの階層を入力する
- フォルダ作成ボタンをクリックする
- フォルダを作成したい場所を指定する
- フォルダの完成
作成したいフォルダの階層を入力する
![](https://www.chemi-jyo.com/work/wp-content/uploads/2023/08/vba_create_hierarchical_folder_1.png)
VBAマクロのファイルに、作成したいフォルダを階層別に入力します。
フォルダツリー状になるように入力してください。
フォルダ作成ボタンをクリックする
![](https://www.chemi-jyo.com/work/wp-content/uploads/2023/08/vba_create_hierarchical_folder_2.png)
【フォルダ作成】ボタンをクリックします。
フォルダを作成したい場所を指定する
![](https://www.chemi-jyo.com/work/wp-content/uploads/2023/08/vba_create_hierarchical_folder_3.png)
ダイアログが開くので、フォルダを作成したい場所を選んで【OK】をクリックします。
フォルダの完成
![](https://www.chemi-jyo.com/work/wp-content/uploads/2023/08/vba_create_hierarchical_folder_4.png)
Excelに入力した階層構造でフォルダが一括作成されます。
階層化フォルダを一括作成するVBAマクロのQ&A
- Excelのファイル名やデータを元に、一括でフォルダを作成することは可能ですか?
-
Excelのデータを元に一括でフォルダを作成することは可能です。 フォルダの作成方法は大きく2種類あります。 ①バッチファイルを使って一括でフォルダを作成する方法。 ②VBAマクロを使って一括でフォルダを作成する方法。
- Excelのリストから一括でフォルダを作成する方法を教えてください。
-
Excelのリストから一括でフォルダを作成する方法は①バッチファイルを使う方法と②VBAを使う方法の2種類あります。 VBAを使う方法は、#階層化フォルダ一括作成VBAマクロファイルの使い方にダウンロードして使えるVBAマクロのファイルがあるので、ご利用ください。
- フォルダをまとめて作成するためのExcelの手順を教えてください。
-
フォルダをまとめて作成するためのExcelの手順は以下の通りです。 ①VBAマクロファイルを「#階層化フォルダ一括作成VBAマクロファイルの使い方」よりダウンロードする。 ②Excelに作成したいフォルダのリストを作る。 ③VBAマクロを実行する。
- フォルダを一括で作成するためのExcelのマクロを教えてください。
-
フォルダを一括で作成するためのExcelのマクロは、「#階層化フォルダを一括作成するVBAマクロの解説」に解説とともに記載しています。
- 一度に大量のフォルダを作成するための効率的な方法はありますか?
-
一度に大量のフォルダを作成する方法は①バッチファイルを使う方法と②VBAを使う方法の2種類あります。 VBAを使う方法は、#階層化フォルダ一括作成VBAマクロファイルの使い方にダウンロードして使えるVBAマクロのファイルがあるので、ご利用ください。
階層化フォルダを一括作成するVBAマクロの解説
このコードは、Excelの特定のシートから読み取ったデータに基づいて、指定したフォルダ内に階層的なサブフォルダを作成するためのマクロです。
具体的には、ユーザーがフォルダを選択すると、Excelシート内のデータに基づいてそのフォルダ内にサブフォルダが作成されます。
Option Explicit
Sub CreatefoldersWithSubfolders()
' 変数の設定
Dim i As Long, cmax As Long, cnt As Long, j As Long, k As Long, n1 As Long
Dim url As String, s As String, s1 As String
' 開始行と列の指定
Dim startRow As Long, startCol As Long
startRow = 4 ' 開始行を4行目に設定
startCol = 2 ' 開始列をB列に設定
' FileSystemObjectの設定
Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
' 対象シートの設定
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Sheet1") ' ThisWorkbookを使用して対象のシートを指定
' セル範囲の指定
cmax = ws1.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
cnt = ws1.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
' フォルダパスの選択
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = -1 Then
url = .SelectedItems(1)
ws1.Range("A2").Value = url ' フォルダパスを出力
Else
MsgBox "フォルダパスを選択してください。"
Exit Sub
End If
End With
' Excelの記載チェック
For i = startRow To cmax
If Application.WorksheetFunction.CountA(ws1.Rows(i)) > 1 Then
MsgBox "行" & i & "に複数の入力があります。入力情報を見直してください"
Exit Sub
End If
Next i
' 階層別にフォルダを作成する
On Error GoTo ErrorHandler
For j = startCol To cnt
For i = startRow To cmax
If ws1.Cells(i, j).Value <> "" Then
s1 = ws1.Cells(i, j).Value
For k = 1 To j - startCol
n1 = ws1.Cells(i, j - k).End(xlUp).Row
s1 = ws1.Cells(n1, j - k).Value & "\" & s1
Next k
s = url & "\" & s1
Call CreateFolderRecursive(fs, s)
End If
Next i
Next j
MsgBox "完了しました"
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました。処理を中断します。エラー内容:" & Err.Description & " エラーが発生したセル: " & ws1.Cells(i, j).Address
' オブジェクト解放
Set fs = Nothing
End Sub
Sub CreateFolderRecursive(fs As Object, ByVal folderPath As String)
Dim parentFolder As String
parentFolder = fs.GetParentFolderName(folderPath)
If Not fs.FolderExists(parentFolder) Then
Call CreateFolderRecursive(fs, parentFolder)
End If
If Not fs.FolderExists(folderPath) Then
fs.CreateFolder folderPath
End If
End Sub
階層化フォルダを一括作成するVBAマクロの解説
- コード実行時の注意点
- コードを実行するのに必要な環境
- 各処理のコードの解説
コード実行時の注意点
データが大量にある場合、処理に時間がかかることがあります。大量のフォルダを作成する際には時間を要する場合がありますので、注意が必要です。
エラーが発生した際は、エラー内容と発生したセルのアドレスがメッセージボックスで表示されます。
コードを実行するのに必要な環境
このコードを実行するには、VBAが有効になっている必要があります。ExcelのオプションからVBAマクロの設定を確認・変更できます。
ファイルとフォルダの操作に使用する”Scripting.FileSystemObject”は、一般的にWindowsの標準コンポーネントとして提供されているため、追加の設定は通常必要ありません。
各処理のコードの解説
各処理のコードの解説
- 変数の設定
- 開始行と列の指定
- FileSystemObjectの設定
- 対象シートの設定
- セル範囲の指定
- フォルダパスの選択
- Excelの記載チェック
変数の設定
セルの操作に必要な変数を宣言します。
Dim i As Long, cmax As Long, cnt As Long, j As Long, k As Long, n1 As Longなど
開始行と列の指定
Excelシートからデータを読み取るための開始行と列を設定します。
startRow = 4 startCol = 2
FileSystemObjectの設定
ファイルとフォルダの操作を可能にするオブジェクトを設定します。
Set fs = CreateObject("Scripting.FileSystemObject")
対象シートの設定
操作するExcelシートを指定します。
Set ws1 = ThisWorkbook.Worksheets("Sheet1")
セル範囲の指定
シート内のデータの最終行と最終列を特定します。
cmax = ws1.Cells.Find(...) cnt = ws1.Cells.Find(...)
フォルダパスの選択
ユーザーにフォルダの選択を求め、選択されたパスをシートに出力します。
With Application.FileDialog(msoFileDialogFolderPicker)...
Excelの記載チェック
入力エラーをチェックし、複数の入力がある場合にエラーメッセージを表示します。
For i = startRow To cmax...
階層別にフォルダを作成
指定した階層構造に基づいてフォルダを作成します。
For j = startCol To cnt... Call CreateFolderRecursive(fs, s)
フォルダの再帰的作成
フォルダが存在しない場合、親フォルダから順に作成します。
Sub CreateFolderRecursive(fs As Object, ByVal folderPath As String)...
まとめ:フォルダの一括作成はVBAで
」
階層化した大呂のフォルダもVBAマクロなら一瞬で作成できます。
コメント