1. ホーム
  2. エクセル

[解決済み】VBAでフォルダー内のファイルをループ処理?

2022-04-05 04:17:16

質問

あるディレクトリのファイル間を vba をExcel 2010で作成しました。

ループの中で、必要になります。

  • ファイル名と
  • ファイルがフォーマットされた日付。

次のようなコードを書きましたが、フォルダのファイル数が50個以下であれば問題なく動作しますが、そうでない場合はとんでもなく遅くなります(>10000個のファイルがあるフォルダで動作させる必要があります)。このコードの唯一の問題点は、「ファイル」を検索するための操作です。 file.name は非常に時間がかかります。

動作はするが、あまりにも遅いコード(100ファイルあたり15秒)。

Sub LoopThroughFiles()
   Dim MyObj As Object, MySource As Object, file As Variant
   Set MySource = MyObj.GetFolder("c:\testfolder\")
   For Each file In MySource.Files
      If InStr(file.name, "test") > 0 Then
         MsgBox "found"
         Exit Sub
      End If
   Next file
End Sub


問題は解決しました。

  1. 私の問題は、以下の解決策によって解決されました。 Dir を特定の方法(15000ファイルに対して20秒)で実行し、タイムスタンプのチェックにはコマンド FileDateTime .
  2. 以下の別の答えを考慮すると、20秒は1秒未満に短縮されます。

解決方法は?

以下は、Function Insteadとしての私の解釈です。

'#######################################################################
'# LoopThroughFiles
'# Function to Loop through files in current directory and return filenames
'# Usage: LoopThroughFiles ActiveWorkbook.Path, "txt" 'inputDirectoryToScanForFile
'# https://stackoverflow.com/questions/10380312/loop-through-files-in-a-folder-using-vba
'#######################################################################
Function LoopThroughFiles(inputDirectoryToScanForFile, filenameCriteria) As String

    Dim StrFile As String
    'Debug.Print "in LoopThroughFiles. inputDirectoryToScanForFile: ", inputDirectoryToScanForFile

    StrFile = Dir(inputDirectoryToScanForFile & "\*" & filenameCriteria)
    Do While Len(StrFile) > 0
        Debug.Print StrFile
        StrFile = Dir

    Loop

End Function