指定フォルダー以下の全ファイルを列挙  玄関へお回り下さい。
指定フォルダー以下(サブフォルダー内を含む)の全ファイルを列挙する     (416)
フォームに List1 とCommand1 を貼り付けて下さい。
  Option Explicit
'使用する前に、[プロジェクト]→[参照設定]で
'Microsoft Scripting Runtime の参照にチェックを入れておいて下さい。

Private Sub
Command1_Click()
  Dim Fso As New FileSystemObject
  List1.Clear
  List1.Visible = False
  '指定のフォルダーを指定
  Call sFolderSearch2(Fso.GetFolder("c:\Test"))
  Set Fso = Nothing
  List1.Visible = True
  MsgBox "ファイルが" & List1.ListCount & "個見つかりました"
End Sub

Private Sub sFolderSearch2(ByVal myFolder As Object)
  Dim mySubFolder As Folder
  Dim myFile   As File
  '現在のフォルダー内のファイルを取得
  For Each myFile In myFolder.Files
    '指定の拡張子のファイルを取得する場合
    ' If LCase(Right(myFile.Name, 3)) = "xls" Then
      List1.AddItem myFolder & "\" & myFile.Name
    ' End If
  Next
  With myFolder
    'サブフォルダー数を取得
    If .SubFolders.Count > 0 Then
      For Each mySubFolder In .SubFolders
        'サブフォルダーがある場合再帰的に繰り返す
        Call sFolderSearch2(mySubFolder)
      Next
    End If
  End With

  Set myFile = Nothing
  Set mySubFolder = Nothing
End Sub

 
コードが簡単なので、FileSystemObject オブジェクトを使って取得しております。
指定の拡張子だけとか取得したい場合は、Dir 関数を使って取得した方が早くなります。又、同じファイルの色々な情報(更新日付やファイルの種類やサイズ等)を同時に取得したい場合は、Shell.Application を使って取得した方が格段に早くなります。

Dir 関数でSystemフォルダー内のファイルを取得するのに  3.5秒かかり
同じものを、Shell.Application で取得すると  0.5秒 で取得できます。





2005/05/27