🎉
【VBA】フォルダ内のキーワードを含むエクセルファイルリストを返す
【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