配列(一次元/二次元)

フォルダ内指定条件のファイル名をフルパスで配列として取得する【ExcelVBA】

フォルダ内、指定条件に合致したファイルを配列として取得したい

特定のファイル名のみに対して処理したい場合など、
フォルダ内のファイルを任意条件で取得したい場合があります。

配列で取得するとそのあとのコードも楽になる場合が多いため、フルパスで取得します。

フォルダ内、指定条件のファイルを配列として取得するサンプルコード

'■指定フォルダ内の指定条件(ワイルドカード有・正規表現不可)に合致するファイルのリストを配列で返す
Public Function Call_GetFileList(FolderPath As String, FileName As String) As Variant
    Dim fso As New FileSystemObject '要参照設定 Microsoft Scripting Runtime
    Dim tmp() As Variant
    Dim i As Long: i = 1
    
    Dim f As File
    For Each f In fso.GetFolder(FolderPath).Files
        If f.Name Like FileName Then
            ReDim Preserve tmp(1 To i)
            tmp(i) = f.Path
            i = i + 1
        End If
    Next
    Call_GetFileList = tmp
End Function

使い方

上記をお好きなモジュール内にコピペしてください。
実際に使用する時は以下のような形で使用してください。

Public Sub sample()
    Dim arr As Variant
    
    '■拡張子を指定しない場合(全てのファイル)
    arr = Call_GetFileList("C:\vba\", "*")
    '■拡張子を指定する 場合
    arr = Call_GetFileList("C:\vba", "*.xlsx")
     
    '格納例(フルパスで取得)
    'C:\vba\sample1.xlsx
    'C:\vba\sample2.xlsx
End Sub

その他

  • 事前に「Microsoft Scripting Runtime」を参照設定必要です。

関連記事

コメント