非プログラマーでもできる!業務の自動化

【VBAマクロダウンロード】Excelで階層化した複数のフォルダを自動で一括作成する方法

当ページのリンクの一部に広告が含まれています。
VBAマクロを使って、Excelから階層化したフォルダを一瞬で一気に作成する方法

課題・悩み「階層化した複数のフォルダを一括で作成したい!けど、フォルダ作成に時間はかけたくない」

解決策「VBAマクロを使って、Excelから階層化したフォルダを一瞬で一気に作成する方法」を解説

フォルダはExcelとバッチファイルとコマンドプロンプトを使って、一括で作成する方法がありますが、ちょこっと複雑で面倒です。

そこで、Excelから階層化したフォルダを作成するVBAマクロを作成しました。

この記事では

【VBAマクロを使って、Excelから階層化したフォルダを一瞬で一気に作成する方法】を図解で解説しています。

VBAマクロファイルを配布中。

以下のボタンよりダウンロードしてください。

目次

階層化フォルダ一括作成VBAマクロファイルの使い方

階層化フォルダ一括作成VBAマクロファイルの使い方

  • 作成したいフォルダの階層を入力する
  • フォルダ作成ボタンをクリックする
  • フォルダを作成したい場所を指定する
  • フォルダの完成

作成したいフォルダの階層を入力する

VBAマクロのファイルに、作成したいフォルダを階層別に入力します。

フォルダツリー状になるように入力してください。

フォルダ作成ボタンをクリックする

【フォルダ作成】ボタンをクリックします。

フォルダを作成したい場所を指定する

ダイアログが開くので、フォルダを作成したい場所を選んで【OK】をクリックします。

フォルダの完成

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マクロなら一瞬で作成できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次