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

【Excel VBA】フォルダ内のサブフォルダ名を自動出力する方法

当ページのリンクの一部に広告が含まれています。

課題・悩み「フォルダ内のフォルダ名一括取得したい」

解決策「ダイアログで選択したフォルダ内のフォルダ名を自動取得するVBAマクロのコード」を解説

Excel VBAを使って、選択したフォルダ内のサブフォルダ名を特定のセルから順に出力するマクロの作成方法を解説します。このマクロを使うことで、手動でフォルダ名を入力する手間を省くことができます。

この記事では

【ダイアログで選択したフォルダ内のフォルダ名を自動取得するVBAマクロのコード】を図解で解説しています。

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

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

目次

フォルダ内のファイル名を取得して出力するVBAマクロのコード

このVBAマクロは、ユーザーが選択したフォルダ内のすべてのサブフォルダ名をExcelのシートに出力するものです。

ユーザーがフォルダを選択し、そのフォルダ内にあるサブフォルダの名前をシートの指定されたセルから順に表示します。

また、選択したフォルダのパスを指定のセルに出力します。


Sub ListSubFolders()
    Dim fldr As FileDialog
    Dim folderPath As String
    Dim folder As Object
    Dim subFolder As Object
    Dim i As Long

    ' フォルダ選択ダイアログを表示
    Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
    fldr.Title = "フォルダを選択してください"
    If fldr.Show <> -1 Then Exit Sub
    folderPath = fldr.SelectedItems(1)

    ' 選択したフォルダのパスをB1セルに出力
    With ThisWorkbook.Sheets("Sheet1")
        .Range("B1").Value = folderPath
    End With

    ' B6セルを初期位置に設定
    i = 6
    With ThisWorkbook.Sheets("Sheet1")
        ' フォルダ名をクリア
        .Range("B6:B" & .Cells(.Rows.Count, "B").End(xlUp).Row).ClearContents

        ' 選択したフォルダ内のサブフォルダを取得
        Set folder = CreateObject("Scripting.FileSystemObject").GetFolder(folderPath)
        For Each subFolder In folder.SubFolders
            .Cells(i, 2).Value = subFolder.Name 
            i = i + 1
        Next subFolder
    End With
End Sub

各処理コードの解説

フォルダ選択ダイアログの表示

ユーザーにフォルダを選択させるためのダイアログを表示します。

Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
fldr.Title = "フォルダを選択してください"
If fldr.Show <> -1 Then Exit Sub

選択されたフォルダのパスを取得

ユーザーが選択したフォルダのパスを変数に保存します。

folderPath = fldr.SelectedItems(1)

フォルダパスの出力

選択されたフォルダのパスをシートのB1セルに出力します。

With ThisWorkbook.Sheets("Sheet1")
 .Range("B1").Value = folderPath
End With

初期位置の設定

サブフォルダ名の出力開始位置をB6セルに設定します。

i = 6

既存データのクリア

指定されたセル範囲の既存データをクリアします。

With ThisWorkbook.Sheets("Sheet1")
 .Range("B6:B" & .Cells(.Rows.Count, "B").End(xlUp).Row).ClearContents
End With

サブフォルダの取得と出力

選択されたフォルダ内のすべてのサブフォルダを取得し、その名前をB6セルから順に出力します。

Set folder = CreateObject("Scripting.FileSystemObject").GetFolder(folderPath)
For Each subFolder In folder.SubFolders
 .Cells(i, 2).Value = subFolder.Name
 i = i + 1
Next subFolder

注意点

処理時間

データが大量にある場合、処理に時間がかかることがあります。

大量のサブフォルダを処理する際は、処理が完了するまで待つ必要があります。

元に戻せない操作

VBAマクロで実行した操作は元に戻せません。

特にデータのクリアや上書きに関しては、実行前に必要なデータのバックアップを取ることをお勧めします。

必要な環境設定

信頼できる場所に保存

このマクロを含むExcelファイルを信頼できる場所に保存し、マクロが有効になっていることを確認してください。

参照設定

このコードでは Scripting.FileSystemObject を使用していますが、これは標準で利用可能なライブラリです。

特別な参照設定は必要ありません。

変更が必要な箇所の解説

シート名の変更

マクロがデータを出力するシート名が異なる場合、コード中のシート名を変更する必要があります。

ThisWorkbook.Sheets("Sheet1")
→ ThisWorkbook.Sheets("あなたのシート名")

初期位置セルの変更

サブフォルダ名の出力開始位置を変更したい場合、初期位置のセルを変更します。

i = 6
→ i = あなたの開始行

フォルダパスの出力セルの変更

選択したフォルダのパスを出力するセルを変更する場合、セル参照を変更します。

.Range("B1").Value = folderPath
→ .Range("あなたのセル参照").Value = folderPath

まとめ

このVBAマクロを使うことで、選択したフォルダ内のサブフォルダ名をExcelに簡単に出力することができます。

手動での入力作業を効率化できるため、ぜひ活用してみてください。

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

コメント

コメントする

目次