VBAで、特定のディレクトリにある特定の拡張子を持つすべてのファイルのリストを取得するにはどうすればよいですか?
できませんApplication.FileSearch
、Excel2007を使用しているため
あなたのコメントに応えて"それを実行することを何回知っていますか?"、この例は、名前が一致するすべてのファイルをリストするまで実行されますstrPattern。 strFolder定数を変更します。
Public Sub ListESY()
Const strFolder As String = "C:\SomeFolder\"
Const strPattern As String = "*.ESY"
Dim strFile As String
strFile = Dir(strFolder & strPattern, vbNormal)
Do While Len(strFile) > 0
Debug.Print strFile '<- view this in Immediate window; Ctrl+g will take you there
strFile = Dir
Loop
End Sub
Dir( "C:\ yourPath\*。ESY"、vbNormal)esy拡張子を持つ最初のファイルを返します。以降のDir()の呼び出しごとに、次の呼び出しが返されます。
代替オプション:オブジェクトのFileSystemObjectファミリには、「Microsoft ScriptingRuntime」ライブラリ([ツール...参照]で確認してください)を使用します。次のようなもの、おそらく:
Public Function ESYFileCount(dir_path as String) as Long
Dim fil As File
With New FileSystemObject
With .GetFolder(dir_path)
For Each fil In .Files
If LCase(Right(fil.Name, 4)) = ".esy" Then
ESYFileCount = ESYFileCount + 1
End If
Next
End With
End With
End Function
次のコードは、FileSystemObjectを使用するよりも約19倍高速に実行されます。私のマシンでは、3つの異なるディレクトリで4000個のファイルを見つけるのに、FileSystemObjectを使用すると1.57秒かかりましたが、このコードを使用すると0.08秒しかかかりませんでした。
Public Function CountFilesWithGivenExtension( _
i_strFolderWithTerminalBackslant As String, _
i_strExtensionIncludingPeriod As String _
) As Long
If Len(Dir$(i_strFolderWithTerminalBackslant & "*" _
& i_strExtensionIncludingPeriod)) > 0 Then
CountFilesWithGivenExtension = 1
While Len(Dir$) > 0
CountFilesWithGivenExtension = _
CountFilesWithGivenExtension + 1
DoEvents
Wend
Else
CountFilesWithGivenExtension = 0
End If
End Function
使用例:
Debug.Print CountFilesWithGivenExtension("C:\", ".ex*")
(「DoEvents」は必須ではありませんが、必要に応じて一時停止/ブレークを使用できます。)