【VBA】指定したフォルダーのサブフォルダーも含むファイルの一覧を取得する方法

指定したフォルダーのサブフォルダーも含むファイルの一覧を取得する方法の例を記載しています。本記事ではFileSystemObjectを利用します。FileSystemObjectをVBAで利用する方法は以下の記事を参照してください。

サブフォルダー内のファイルも含むファイルの一覧を取得するVBA

Option Explicit

' GetFileListプロシージャから、実際にファイルの一覧を取得する
' GetFileListInFolderプロシージャを呼び出す
Sub GetFileList()
    Const folderPath As String = "C:\Windows"
    
    Call GetFileListInFolder(folderPath, True)

End Sub

' ファイルの一覧を出力する
' folderPath:ファイルの一覧を取得したいフォルダーのパスの文字列
' isSubFolder:サブフォルダーも対象に一覧出力したい場合はTrue、そうでなければ、False
Sub GetFileListInFolder(folderPath, isSubFolder)
    
    Dim fso As FileSystemObject '① FileSystemObject オブジェクト変数の宣言
    Dim folderObj As Folder     '② Folder オブジェクト変数の宣言
    Dim fileObj As File         '③ File オブジェクト変数の宣言

    Set fso = New FileSystemObject             '④ FileSystemObjectの割り当て
    
    If Not (fso.FolderExists(folderPath)) Then '⑤ フォルダーが見つからなかったら処理を中断
        Set fso = Nothing
        MsgBox ("フォルダーが見つかりません。処理を中断します。" & vbCrLf & _
        "フォルダー:" & folderPath)
        Exit Sub
    End If
    
    If isSubFolder Then  '⑥ 引数isSubFolderがTrueだった場合、GetFileListInFolderを再帰的呼び出し。
        For Each folderObj In fso.GetFolder(folderPath).SubFolders
            Call GetFileListInFolder(folderObj.Path, isSubFolder)
        Next
    End If
    
    Set folderObj = fso.GetFolder(folderPath)  '⑦ 変数folderPathのフォルダーの取得

    For Each fileObj In folderObj.Files  '⑧ フォルダー内にある複数のファイルに対して繰り返す
        Debug.Print fileObj.Path '⑨ ファイルの名前をイミディエイトに出力 
    Next

    Set fso = Nothing '⑩ fsoの破棄

End Sub

コメント

タイトルとURLをコピーしました