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シートに書き出すことができます。サブディレクトリの処理や、ファイルの詳細情報を含む柔軟な機能を備えているため、様々な用途で活用できます。
ぜひ試してみてください。
コメント