★ 指定したフォルダ内の、すべてのサブフォルダを延々と掘っていって、『 すべてのファイルとすべてのサブフォルダ 』の基本情報を指定したシートにゲットする(吸い込む)プログラム。(再帰的な処理)

  

※関連記事
すべてのファイルを再帰的に順に編集
すべてのファイルのモジュールの内容を一括書き出し
すべてのファイルとフォルダの基本情報の吸い込み
処理速度がOpenメソッド利用時の2倍?すべてのExcelファイルのすべてのシート名をファイルを開かずにゲット

  
※2022/12/06 追記

★かなり重要な注意事項
後述の「Dir」を使う場合に関しては、
「Dir関数は認識できない文字(文字コード?)があるらしく、また、最悪なことに、プログラムの書き方によっては、”エラーが出てほしいところで出ない”」
という機能不足や不都合があるようです。
システムとしては致命的になってしまうので、基本的には「使わないほうが無難」なようです。

どうしても使いたいなら
『「確実にパソコン内」だけで付けたファイル名しか「絶対に・100%」ありえない 』、
という前提の場合しか役に立たないようです。

また、Dir関数を使うほうが速度は4、5倍は速いようですが、一部のファイル名を認識できずにエラーになるようでは、全てのファイルやフォルダを拾えません。「4、5倍は速い」なんてものは何の意味もない、ということになります。

※2024/01/28追記
電帳法の関係でExcelで検索簿を作っていたら、Dir関数でのファイルの存在チェックで、「機種依存文字」が、Windows機種依存文字であるにもかかわらず、Dir関数では認識できずにエラーになる、ということがわかりました。
前述のことは、そのことを言っていたのですね・・・。勉強不足ですみません。
ですので、「全フォルダをループしてファイル名を調べて何かする、という場合は、もはやDir関数でのループは絶対に勧めてはいけない方法、ということになりました。
「絶対に機種依存文字は使いようがない」という状況の、ループ以外の場所でなら、使えます。
いずれにしましても、WebにはDir関数を使って再帰的にフォルダを掘っていくサンプルコードやQ&Aサイトでの回答がありますが、全部、真似しないようにご注意ください。FSOだけを使っているサンプルプログラムや回答だけを拾ってください。FSOは、VBEのウォッチウィンドウなどでは機種依存文字を「?」で表示していますが、実際には、ちゃんと機種依存文字を認識してくれます。

そのあたりについて詳しく書いてあるWebサイトをご紹介します。
mhtmlなどで保存しておくことをおすすめします。
VBAでファイルリストを高速に取得する関数を自作する part1
VBAでファイルリストを高速に取得する関数を自作する part2
VBAでファイルリストを高速に取得する関数を自作する part3
VBAでファイルリストを高速に取得する関数を自作する part4

↑「ファイル・フォルダリストをゲットするだけ」というシーンでしか使えないかもしれませんが、Dir関数を使うよりも何倍も速いプログラムコードも紹介されています。
もちろん、文字コードの問題もありません。
ほんと、mhtmlなどで保存しておくことをおすすめします。

  
=============================
以下、本文です。
  

以降に挙げたプログラムを標準モジュールに単純にALLコピペして、
「GetFolderAndFileListMain02」のほうだけを実行します。
(※バージョン2000の場合はエラーになります)

  

なお、このプログラムを、他のプログラムに流用したい場合は、
「GetFolderAndFileListMain02」のほうの
「o_ImpWs01.Cells.ClearContents」から「End With '↑列名(項目名)を書き込む」というところまでをカットし、
「GetFolderAndFileListSub」のほうの
2つのFor Each のループの中を、書き換えます。

ただその場合、「GetFolderAndFileListSub」のほうは、
基本、
1つ目のFor Each のループ(サブフォルダのみに対する処理)は、

For Each myFolder In FSO.GetFolder(s_folderPath).subfolders
 Call GetFolderAndFileListSub(o_ImpSheet, myFolder.Path, myCount)
Next myFolder

の3行だけがあればOKです。
下記のプログラムでは、事例として「サブフォルダの内容もゲットしたい」ということでやりましたので色々書いてありますが、
通常は、「ファイルたち」「だけ」に何かしたい場合が多いので、
その場合は、
2つ目のFor Each のループの内容だけ書き換えて(あるいは関数化して)、
1つ目のFor Each のループは、上記の3行だけがあればOKです。

  

  

★上記のコードを、ファイルパスだけ(フォルダ無し。更新日等も無し。)をリストアップしたい場合。

2つめのプロシージャの「GetFolderAndFileListSub()」の
「For Each o_FolderItem In FSO.GetFolder(s_folderPath).subfolders」のループの中身を、
「Call GetFolderAndFileListSub(o_ImpSheet, o_FolderItem.Path, myCount)」
の1行だけ残して、
「For Each o_FileItem In FSO.GetFolder(s_folderPath).Files」のループの
ファイル名を書き出すコードだけを残したもの・・・・、
です。

  

  

★ 【ひな型化】~ サブフォルダーを掘っていくループにさせたいことと、現在のフォルダのループにさせたいことを、さらに、関数化・分離した場合のテスト(引数の、他のプロシージャへの参照渡しでのさらなる引継ぎも含め)

以下のように、分割すれば、「サブフォルダを延々と掘って処理していくプログラム」がある程度「ひな型化」できるかも?
(※↓一応動きますがチェックが甘いのでちゃんと使えるかわかりません。あくまでもテストです。↓)

  
  
★ 冒頭のコードを、「特定の拡張子の、特定の語句をファイル名に含むファイルをリストアップする例」に修正してみたもの

※対象はファイルのみ、で、フォルダに対しての情報は得ないものとする。

  
  
★ 冒頭のコードを、「”すべて”の拡張子の、特定の語句をファイル名に含むファイルをリストアップする例」に修正してみたもの

※対象はファイルのみ、で、フォルダに対しての情報は得ないものとする。