Excel VBAを使って指定ディレクトリのファイル一覧を取得する方法
この記事では、Excel VBAを使用して指定したディレクトリ内のファイル一覧を取得し、Excelシートに書き出す方法について紹介します。このマクロはサブディレクトリ内のファイルを含めるかどうかを選択する機能も備えています。
マクロの機能
- ユーザーにフォルダ選択ダイアログを表示
- サブディレクトリを含めるかどうかを選択
- 「ディレクトリ名、ファイル名、ファイルサイズ、更新日時、ファイルの種類」をExcelシートに書き出し
コードの登録方法
- 下部にあるVBAコードをコピーします。
- ALT+F11キーでVBAエディターを起動します。
- 「挿入」→「標準モジュール」で「Module N」を作成します。

- 「Module N」へ貼り付けてください。貼り付けた後はVBAエディタを閉じます。

登録したコードの使用方法
- ワークシート内でALT+F8を用いマクロリストを開きます。「ListFilesInFolder」を実行してください。

- フォルダーを選択してください。

- サブディレクトリを含むかどうかを決めます。

- リストが生成されます。
- 列幅の調整は自分でしてください。左から「ディレクトリ名、ファイル名、ファイルサイズ、更新日時、ファイルの種類」となります。

ディレクトリ名 ファイル名 ファイルサイズ 更新日時 ファイルの種類
このマクロ付きブックの保存
標準のブックでは、VBAコードは保存の対象になりません。VBAコードごと保存するならば、「ファイルの種類:Excel マクロ有効ブック」ととしてください。

VBAコード
Sub ListFilesInFolder()
Dim folderPath As String
Dim targetCell As Range
Dim includeSubfolders As Boolean
Dim fs As Object, folder As Object, file As Object, subfolder As Object
Dim i As Long
Dim initialFolderPath As String
On Error GoTo ErrorHandler
' 既定のフォルダーパスの設定
If ThisWorkbook.Path = "" Then
initialFolderPath = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
Else
initialFolderPath = ThisWorkbook.Path
End If
' ユーザーにフォルダを選択させる
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択してください"
.AllowMultiSelect = False
.InitialFileName = initialFolderPath & "\"
If .Show <> -1 Then Exit Sub
folderPath = .SelectedItems(1)
End With
' サブフォルダを含むかどうかの設定
includeSubfolders = (MsgBox("サブディレクトリ内のファイルも含めますか?", vbYesNo + vbQuestion, "サブディレクトリの選択") = vbYes)
' 書き出し先セルの選択
Set targetCell = ActiveCell
Set fs = CreateObject("Scripting.FileSystemObject")
Set folder = fs.GetFolder(folderPath)
i = 0
' ファイル情報の書き出し
For Each file In folder.Files
i = i + 1
WriteFileInfo file, targetCell, i
Next file
' サブディレクトリを含む場合、再帰的に処理
If includeSubfolders Then
For Each subfolder In folder.SubFolders
ListFilesInSubfolder subfolder, targetCell, i, includeSubfolders
Next subfolder
End If
MsgBox i & "個のファイルをリストしました。", vbInformation
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub
Sub ListFilesInSubfolder(folder As Object, targetCell As Range, ByRef i As Long, includeSubfolders As Boolean)
Dim file As Object
Dim subfolder As Object
On Error Resume Next
For Each file In folder.Files
i = i + 1
WriteFileInfo file, targetCell, i
If Err.Number <> 0 Then
Err.Clear
i = i - 1 ' エラーが発生した場合はカウンターを戻す
End If
Next file
For Each subfolder In folder.SubFolders
ListFilesInSubfolder subfolder, targetCell, i, includeSubfolders
If Err.Number <> 0 Then Err.Clear
Next subfolder
On Error GoTo 0
End Sub
Sub WriteFileInfo(file As Object, targetCell As Range, ByVal i As Long)
With targetCell.Offset(i - 1, 0)
.Value = file.ParentFolder.Path
.Offset(0, 1).Value = "'" & file.Name
.Offset(0, 2).Value = file.Size
.Offset(0, 3).Value = file.DateLastModified
.Offset(0, 4).Value = file.Type
End With
End Sub
このマクロを使用することで、指定したフォルダ内のファイル一覧を簡単にExcelシートに書き出すことができます。サブディレクトリの処理や、ファイルの詳細情報を含む柔軟な機能を備えているため、様々な用途で活用できます。
ぜひ試してみてください。

コメント