#478 再帰的にサブフォルダまでファイルを列挙する方法 VBA

あるフォルダ内のファイルを探索するには、Dir関数を使います。しかしこの関数では、指定したフォルダ直下しか探索できません。また、ひとつのプロシージャでサブフォルダまで探索する機能を実現したい場合には、一般的にはプロシージャからさらにそのプロシージャ自身を呼び出す”再帰呼び出し”という方法を使いますが、Dir関数を使ったプロシージャではそのような処理を行うことができません。

一方、「#100  FileSystemObjectでファイルの情報を列挙する方法」で説明しているFileSystemObjectオブジェクトでも、指定したフォルダ内の探索を行うことができます。さらにFileSystemObjectオブジェクトでは、上記の再帰呼び出しを実現することができます。

#100では指定フォルダ直下の例しか説明しませんでしたので、ここでFileSystemObjectオブジェクトによるサブフォルダまでの再帰的ファイル探索のプログラム(プロシージャ)例を紹介します。


Public Sub FolderSearch(strTargetDir As String)
'strTargetDir:探索対象のトップのフォルダ名を指定します

  Dim fso As Object
  Dim folder As Object
  Dim subfolder As Object
  Dim file As Object
  
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set folder = fso.GetFolder(strTargetDir)
  
  'フォルダ内のサブフォルダを列挙
  '(サブフォルダがなければループ内は通らず)
  For Each subfolder In folder.SubFolders
    '再帰的呼び出し
    FolderSearch subfolder.Path
  Next subfolder
  
  'カレントフォルダ内のファイルを列挙
  For Each file In folder.Files
    With file
      Debug.Print .Name, .Path, .Size
    End With
  Next file

End Sub



次の画面が、実際のプロシージャの実行例です。
ここでは「C:\Program Files\Microsoft Office\Office12\BITMAPS」フォルダの下にあるファイルおよびサブフォルダ内のファイルを列挙しています。
なお、「.Name」でファイル名、「.Path」でファイルのフルパス、「.Size」でファイルサイズをイミディエイトウィンドウに出力しています。
プロシージャの実行例
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved