【EXCEL VBA】フォルダ配下のファイル一覧を再帰的に取得したい

以前、フォルダ配下の複数ファイルを一括で処理する方法を紹介しました。

しかし、フォルダ配下に年月単位のフォルダが作成されており、必要なファイルはその下のフォルダにあることが良くあります。そこで、フォルダ配下のファイル一覧を再帰的に取得する方法を紹介します。

FileSystemObject を使って解決する

EXCEL VBAでフォルダ・ファイル関連の処理をするには、FileSystemObjectを利用するのが近道で安全です。紹介するサンプルプログラムでもFileSystemObjectを使用しています。

ただし、サンプルプログラムを動かすには、VBEの参照設定を変更する必要があります。FileSystemObjectを利用するために、ツール – 参照設定にて、Microsoft Scripting Runtimeにチェックを入れる必要があります。 詳細は以下の記事を参照してください。

前回の記事ではファイル一覧を取得する際に「fso.GetFolder(path).Files」を使用しましたが、今回はフォルダ一覧も取得する必要があるため「fso.GetFolder(path).SubFolders」も使用します。

サンプルプログラムを確認する(コピペOK)

Sub sample()
  Call getFilesRecursive("C:\Drivers")
End Sub

Sub getFilesRecursive(path As String)
  Dim fso As FileSystemObject: Set fso = New FileSystemObject
  Dim objFolder As folder
  Dim objFile As file
    
  ' GetFolder(フォルダ名).SubFoldersでフォルダ配下のフォルダ一覧を取得
  For Each objFolder In fso.GetFolder(path).SubFolders
    Call getFilesRecursive(objFolder.path)
  Next
    
  ' GetFolder(フォルダ名).Filesでフォルダ配下のファイル一覧を取得
  For Each objFile In fso.GetFolder(path).Files
    Call execute(objFile)
  Next
End Sub

Sub execute(f As file)
  ' ファイル毎に処理する内容を記述する。今回はファイル名を出力するのみ。
  Debug.Print f.Name
End Sub

コメント

  1. […] 一番シンプルでわかりやすいと思ったのが、EXCEL VBA研究所さんのソースコードです。 […]