【Excel Vba】サブディレクトリを含むファイル一覧を取得するマクロ
スポンサーリンク

はじめに

Excel でカウントディレクトリのファイルに加えてサブディレクトリに含まれるファイルの一覧を出力するマクロの作成方法についてご紹介します。

ちょっと専門用語が多かったような気もするので、

要するにあるフォルダ内にフォルダの中のファイルも全部含めてファイル一覧させる方法についてご紹介します。

 

今回は Excel Vba を使います。

自分でつくってみてだいたい1~2時間くらいでできましたが、結構簡単なのでぜひ興味のある方は参考にしてみてください。

※実際に作成したマクロは下記からダウンロードできますので、興味のある方はぜひダウンロードしてみてください。

 

作成方法

ご紹介します Excel マクロは大きく二つの機能から構成されています。

機能
  1. ファイル一覧を出力するパスを取得
  2. 取得したパスからファイル一覧を出力

ファイル一覧を出力するパスを取得

ファイル一覧を表示させるためのファイルパスを取得するための機能をご紹介します。

下記画面のように「フォルダパス取得」ボタンを押下することで、ファイル一覧を表示させるためのファイルパス(下画面なら「C:\test」)を表示させます。

下記にソースコードを記載します。

 

要はダイアログ画面からファイルをファイルパスを選択して、選択した値をB3セルに書き込むというそれだけの処理です。

 

取得したパスからファイル一覧を出力

これは「ファイル一覧出力」ボタンを押下することで、取得したパスのファイル一覧出力を出力させる処理です。

 

処理は下記の順番になります。順を追って説明していきます。

  1. 取得したパスが正しい値であるかを確認
  2. シートの初期化
  3. ファイル一覧作成
  4. シートのフォーマット整形

 

 

取得したパスが正しい値であるかを確認

ここでは取得したパスが正しいパスかどうかを確認します。

前述しました「ファイルパス取得」ボタンを押していれば間違いなく正しいパスが取得できますが、

ボタンを押し忘れたり誤って値を入力することでわけわからんパスを参照することを防ぎます。

ソースコード
取得したパスを変数 searchFolderPath に格納し、Dir 関数を用いてファイルの存在チェックを行います。

その結果をcheckFolderPathに格納し、もし searchFolderPath か checkFolderPath の値が空の場合はエラーメッセージを表示させ処理を終了します。

 

シートの初期化

これは処理を行う前にシートをきれいにする処理のことです。

具体的には、ファイル一覧を出力しているセル範囲(B6以降のセル)の値のみを削除しています(書式は削除していません)。

ソースコード
 

ファイル一覧作成

ここではファイル一覧を取得し、それをシートに出力する処理です。

引数は、取得したパス searchFolderPath、書き込むセルの位置 start_x、 start_y の3つです。

まずはフォルダ以外のファイル名を取得し、そのファイルの情報(下記に記載します)を取得します。

下記の 変数 fileNameはフォルダ内にあるファイルを変数に格納させた値と思ってください。

  1. ファイル名  ※下記に記載
  2. ファイルのパス(ファイル名を除く) → Left(fileName.Path, slashNum - 1)
  3. ファイルサイズ(バイト)→ Format(fileName.Size / 1024, "0.#0") & " バイト"
  4. 作成日時  → fileName.DateCreated
  5. 更新日時 → fileName.DateLastModified
※ ファイル名の処理

まず、フォルダ内のファイルのフルパス fileName.Path とし、その fileName.Pathの後方から最初に来る「\」よりも後ろの値を取得します。

何言っているかよくわからない方もいると思いますので、もう少し具体的に説明しますと

例えばフォルダ内のファイルのフルパス fileName.Pathが以下のような値としますと、

C:\test\test1\aaa.txt
このうちファイル名は「aaa.txt」であるため、まずこの文字列を前から数えて「\」がある箇所が何番目にあるかを確認し、
その値を slashNumとします。
そして fileName.Path から 「slashNum - 1」番目以降(- 1は「\」を除くため)にある文字を抽出することでファイル名が取得できます。 
下記にソースコードを記載します。
 

次にフォルダ内にあるサブフォルダ(サブディレクトリ)については、GetFolder関数を用いて取得します。

そして再帰処理(つまり処理を繰り返す)を行い、サブフォルダが見つからなくなくなるまで処理をくり返します。

その処理を繰り返している間も、そのフォルダに含まれるファイル名はすべて出力するようにします。

下記にソースコードを記載します。

 

最後に

いかがでしょうか?

もしつくるのめんどくせえとか実際に作ったのがそんなのか見てみたい!という人がいましたら下記ボタンからダウンロードできますので、ぜひ試してみてください。

スポンサーリンク
おすすめの記事