🎉

【VBA】フォルダ内のキーワードを含むエクセルファイルリストを返す

2023/07/02に公開

【VBA】複数のエクセルファイルを選択してファイルパスを返すコードで雑に処理したいエクセルファイルのリストを取得することができますが、フォルダパスを選択してそこからリストを取得する方がスマートではあります。
引数にはフォルダリストとキーワードを指定します。
指定したフォルダ内のエクセルファイルの中にキーワードを含むエクセルファイルがあればそのファイルパスのリストを返します。

Function GetMatchingExcelFiles(folderPath As String, keyword As String) As Variant
    '選択したフォルダ内のキーワードを含むエクセルファイルリストを返す
    
    Dim filesArray() As Variant
    Dim fileName     As String
    Dim i            As Long
    Dim fileCount    As Long

    ' フォルダ内のすべてのファイルを取得(.xlsx)
    fileName = Dir(folderPath & "\*.xlsx")

    ' マッチするファイルを格納するための配列を初期化
    ReDim filesArray(1 To 1)
    fileCount = 0
    
    ' キーワードに一致するファイルを配列に追加(.xls)
    fileName = Dir(folderPath & "\*.xls")
    Do While fileName <> ""
        If InStr(1, fileName, keyword, vbTextCompare) > 0 Then
            fileCount = fileCount + 1
            ReDim Preserve filesArray(1 To fileCount)
            filesArray(fileCount) = folderPath & "\" & fileName
        End If
        fileName = Dir()
    Loop

    ' マッチするファイルが存在しない場合は、空の配列を返す
    If fileCount = 0 Then
        GetMatchingExcelFiles = filesArray()
    Else
        GetMatchingExcelFiles = filesArray
    End If

使い方

【VBA】フォルダを選択してフォルダパスを返すコードをSelectFolderとして使ってfolderPathに代入しているので同じモジュール内に全文をコピーして定義しておいてください。

Sub test()
    
    Dim folderPath As String
    folderPath = SelectFolder
    
    Dim folderPathList() As Variant
    folderPathList = GetMatchingExcelFiles(folderPath, "キーワード")
    
    Dim i As Long
    For i = LBound(folderPathList) To UBound(folderPathList)
        Debug.Print folderPathList(i)
    Next i

End Sub

"キーワード"とFor文内のDubug.Printで表示させている部分をしたい処理に書き換えてお使いください。

Discussion