フォルダー内のファイル一覧を取得するマクロ

Excel VBAを使って指定ディレクトリのファイル一覧を取得する方法

この記事では、Excel VBAを使用して指定したディレクトリ内のファイル一覧を取得し、Excelシートに書き出す方法について紹介します。このマクロはサブディレクトリ内のファイルを含めるかどうかを選択する機能も備えています。

マクロの機能

  • ユーザーにフォルダ選択ダイアログを表示
  • サブディレクトリを含めるかどうかを選択
  • 「ディレクトリ名、ファイル名、ファイルサイズ、更新日時、ファイルの種類」をExcelシートに書き出し

コードの登録方法

  • 下部にあるVBAコードをコピーします。
  • ALT+F11キーでVBAエディターを起動します。
  • 「挿入」→「標準モジュール」で「Module N」を作成します。

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

登録したコードの使用方法

  • ワークシート内でALT+F8を用いマクロリストを開きます。「ListFilesInFolder」を実行してください。
  • フォルダーを選択してください。

  • サブディレクトリを含むかどうかを決めます。
  • リストが生成されます。

    フォルダー内にあるファイルの一覧を書き出すVBAマクロの紹介

    フォルダー内にあるファイルの一覧を書き出すVBAマクロの紹介

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

ディレクトリ名	ファイル名	ファイルサイズ	更新日時	ファイルの種類

このマクロ付きブックの保存

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

ぜひ試してみてください。

コメント