再帰呼び出しって聞いたことありますか?
ある処理の中で、自分自身を呼び出す処理のことをいいます。
今回はこの考え方を使って、指定したフォルダ内を検索し、サブフォルダがあったらどんどん下層へ進んでいき、最下層までたどり着いたら、指定したフォルダへ戻って、次のサブフォルダを探す。
次のサブフォルダがあれば、同じように最下層めがけて進んでいく、という繰り返し処理を行います。
VBAのコードはこちら。
Public Sub SubFolderSearch(strTgtFld As String) Dim Fso As Object Dim objFld As Object Dim objSubFld As Object Set Fso = CreateObject("Scripting.FileSystemObject") Set objFld = Fso.GetFolder(strTgtFld) 'フォルダ内のサブフォルダを列挙 For Each objSubFld In objFld.SubFolders Debug.Print objSubFld.Path '再帰呼び出し SubFolderSearch objSubFld.Path Next objSubFld End Sub
Sub test() Call SubFolderSearch("C:\フォルダ名") End Sub
使い方ですが、Call SubFolderSearch(“C:\フォルダ名”)の「 C:\フォルダ名 」に検索対象のフォルダのパスを入力し、実行してください。
ビジュアル・ベーシック・エディターのイミディエイトウィンドウに実行結果が出力されます。
今回、和休のパソコンのEドライブを指定して実行した例です。
Sub test() Call SubFolderSearch("e:\") End Sub
結果
E:\3の倍数と3がつく数字のときアホになる E:\フォルダの奥深くまで検索してみよう E:\フォルダの奥深くまで検索してみよう\新しいフォルダー1 E:\フォルダの奥深くまで検索してみよう\新しいフォルダー1\新しいフォルダー1-1 E:\フォルダの奥深くまで検索してみよう\新しいフォルダー1\新しいフォルダー1-1\新しいフォルダー1-1-1 E:\フォルダの奥深くまで検索してみよう\新しいフォルダー1\新しいフォルダー1-2 E:\フォルダの奥深くまで検索してみよう\新しいフォルダー1\新しいフォルダー1-2\新しいフォルダー1-2-1 E:\フォルダの奥深くまで検索してみよう\新しいフォルダー1\新しいフォルダー1-2\新しいフォルダー1-2-2 E:\フォルダの奥深くまで検索してみよう\新しいフォルダー1\新しいフォルダー1-2\新しいフォルダー1-2-3 E:\フォルダの奥深くまで検索してみよう\新しいフォルダー1\新しいフォルダー1-3 E:\フォルダの奥深くまで検索してみよう\新しいフォルダー2 E:\フォルダの奥深くまで検索してみよう\新しいフォルダー2\新しいフォルダー2-1 E:\フォルダの奥深くまで検索してみよう\新しいフォルダー2\新しいフォルダー2-2 E:\フォルダの奥深くまで検索してみよう\新しいフォルダー2\新しいフォルダー2-3 E:\フォルダの奥深くまで検索してみよう\新しいフォルダー2\新しいフォルダー2-4 E:\フォルダの奥深くまで検索してみよう\新しいフォルダー2\新しいフォルダー2-4\新しいフォルダー2-4-1 E:\フォルダの奥深くまで検索してみよう\新しいフォルダー2\新しいフォルダー2-4\新しいフォルダー2-4-1\新しいフォルダー2-4-1-1 E:\フォルダの奥深くまで検索してみよう\新しいフォルダー3 E:\事業所郵便番号をIME辞書に登録するよ E:\元年表記 E:\起算日から6月経過しているか調べる E:\連番を振ろう
コメントをどうぞ!