フォルダ内のフォルダ名の変更
課題・悩み「フォルダ内のフォルダ名一括取得したい」
解決策「ダイアログで選択したフォルダ内のフォルダ名を自動取得する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に簡単に出力することができます。
手動での入力作業を効率化できるため、ぜひ活用してみてください。
コメント