【VBA】フォルダ内から同じ拡張子のファイル一覧を取得する

エクセルVBAで使うコードの備忘録。フォルダ内に存在するファイルのうち同じ拡張子のもののみを抽出してリスト化するコード。FileSystemObjectを利用して実現しています。

スポンサーリンク

FileSystemObjectで拡張子を判定する

Windows上でファイルの情報にアクセスするには、FileSystemObjectを利用するのが便利です。FileSystemObjectを利用すると簡単に、

  • 指定フォルダ内のファイル一覧を取得(GetFolder(“[フォルダパス]”).Files)
  • 指定ファイルの名前を取得(GetFileName)
  • 指定ファイルの拡張子を取得(GetExtensionName)

ができてしまうので、これらを組み合わせれば目的を達成することができます。

ファイルシステムオブジェクト(FileSystemObject)はウィンドウズのファイルやフォルダに関連する操作や情報を扱うためのオブジェクトで、を使用するには下記のようにまずオブジェクトを宣言し設定をします。

'--- ファイルシステムオブジェクトを設定 ---'
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

同じ拡張子のファイルをリスト化する

下記のサンプルコードでは、FileSystemObjectを利用して、指定フォルダ内にある指定拡張子のファイルのリストを作成しています。拡張子の大文字・小文字を区別しないため、拡張子を判定する際にはLCaseメソッドを利用して取得した拡張子を全て小文字に変換しています。

同じ拡張子のファイルをリスト化する

Public Sub GetFileList()
    
    '--- ファイルシステムオブジェクトを作成 ---'
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    '--- リストを取得したいフォルダのパス ---'
    Dim folderPath As String
    folderPath = "[フォルダのパス]"
    
    '--- 抽出したい拡張子 ---'
    Dim ext As String
    ext = "[拡張子]"
    
    '--- 指定拡張子のファイル数を数える変数 ---'
    Dim count As Long
    count = 0
    
    '--- ファイルリストを格納する変数 ---'
    Dim fileList() As String
    
    
    '--- フォルダ内のすべてのファイルに対してループ ---'
    Dim tmp As Object
    For Each tmp In fso.GetFolder(folderPath).Files
        
        '--- 拡張子が同じかどうか判定 ---'
        If (LCase(fso.GetExtensionName(tmp)) = LCase(ext)) Then
            
            '--- 配列を拡張して格納 ---'
            count = count = 1
            ReDim Preserve fileList(1 To count)
            fileList(count) = fso.GetFileName(tmp)
            
        End If
        
    Next tmp
    
End Sub