VBA: ファイルの一覧を再帰的に出力する


よく使うコードのメモです。

Excel などで、あるフォルダ以下のファイル一覧を出力したいときに使うコードです。 言語は VBA です。

VBA は オブジェクト指向的 に書くこともできるのですが、 急遽必要だったので、「とりあえず動けばいい!」というスタイルで作りました。

プログラムの流れ

  1. シート上のボタンをクリックします。
  2. フォルダ選択ダイアログを表示します。
  3. 選択されたフォルダ以下のファイルを再帰的にリストにします。
  4. リストになったファイル一覧を、フォーム(またはシート)に出力します。

やること

  • モジュールを作成して、次の関数を作成します。
    • ファイル一覧を取得する
    • フォルダ選択ダイアログを処理する
  • 結果を出力するダイアログを作る。
  • シートにボタンを作ってクリックしたときの処理を追加する。

VBA で モジュールファイル を作成して 次の2種類の関数を記述します。

ファイル一覧取得

getFileAndDirectories が ファイル一覧 を取得して 文字列 に 変換するメソッドです。 1行1ファイルで、ファイルの数だけ改行されます。 フォルダの区切り文字は “/” になっていますが パラメータにして可変にするのもありです。 (仕事の都合上 “/” になっています。)

フォルダ選択

先の関数でファイル一覧を取得するのですが、どのフォルダ以下のファイル一覧を取得するのか決めなければいけません。 そこでフォルダを選択するためのメソッドです。

ここまででモジュールの編集は終了です。

実行結果の出力フォーム

実行結果を出力するフォームを作成します。

ここではフォームにひとつだけ TextBox を配置した textViewForm に結果を出力するものとして話を進めます。 TextBox は 複数行を扱えるようにするなど、 適宜プロパティを調整してください。

出力する結果はテキストデータなので、 シートに直接出力することもできます。

ここからはシート上にボタンを配置し、クリックした時に処理を開始するようにしていきます。

シートにボタン設置

シートにボタンを設置してください。 そして下のコードを追加して、 シートのボタンからファイル一覧を取得できるようにします。 エラーハンドリングが完全ではありませんので注意してください。