指定フォルダのファイル一覧を取得する

コマンドプロンプトで「dir /on /s > a.txt」と入力するとa.txtにそのフォルダ配下のサブフォルダも含めたファイルの一覧が取得できます。

これと同様にVBAでも指定フォルダ配下のサブフォルダに含まれるファイルの一覧を取得することができます。

処理概要

ここではFileSystemObjectを利用する方法になります。

  1. FileSystemObjectのGetFolderメソッドを使い、指定フォルダ配下のサブフォルダを取得します。
  2. 取得したサブフォルダの中にさらにサブフォルダがある場合を考慮して、関数を再帰呼び出しします。
  3. 引数のフォルダの中にあるファイルを取得します。ファイルは、FolderオブジェクトのFilesプロパティでファイルの一覧としてを取得します。

以下のソースコードではファイルの一覧を単純にDebug.Printでイミディエイトウインドウに出力していますが、実際にはファイル出力やセルへの貼り付けなどを行うことが多いと思いますので適宜変更してください。

事前設定

以下のサンプルコードでは参照設定でFileSystemObjectクラスを利用できるようにしています。

FileSystemObjectクラスを利用するには、事前にVBA画面→ツールメニュー→参照設定、を選択し、参照設定ダイアログで「Microsoft Scripting Runtime」にチェックを付けます。

詳細は「VBAでのFileSystemObjectとTextStreamの使い方」の事前設定をご参照ください。

ソースコード

 

テスト用ソースコード

こちらは上の関数をテストするためのソースコードです。

実行するとVBEのイミディエイトウインドウにファイルの一覧が出力されます。

ここではファイルパスをC:\test\としています。

 

サブフォルダ配下の取得は不要な場合

上のソースではサブフォルダ配下までファイルを探しに行っていますが、サブフォルダは見なくていい場合があります。

その場合は、17行目から20行目までをコメントにするなどで削除してください。

指定フォルダにあるファイルのみを取得するようになります。