#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」でファイルサイズをイミディエイトウィンドウに出力しています。 |
|||
|
Copyright © T'sWare All rights reserved |