【EXCEL:VBA】サブフォルダを含む全てのフォルダやファイルの情報を取得したい

サブフォルダを含む全てのフォルダやファイルの情報を取得したい

この記事では、指定したフォルダに存在する全てのサブフォルダおよびファイルの情報を取得する機能について説明します。

 

サブフォルダおよびファイルを再帰的に検索して、情報を取得します。

 

フォルダ・ファイル一覧を一度作成しておけば、追加されたり、変更されたフォルダやファイルを見つけることが簡単になります。

 

フォルダの情報は、以下を取得します。

  • フォルダパス
  • 更新日時
  • フォルダサイズ

 

ファイルの情報は、以下を取得します。

  • ファイル名
  • ファイルが存在するフォルダパス
  • 更新日時
  • ファイルの種類
  • ファイルサイズ

 

それでは、指定したフォルダのサブフォルダを含む全てのフォルダやファイルの情報を取得する機能を作成していきましょう。

 

困っている女性

部署内で共有利用しているフォルダに、それぞれの人がフォルダやファイルを日々作成したり、変更したりするの。

困っている女性

そのフォルダの変更を把握したいけど、どうしたらいい!?
フォルダとファイルの一覧を作成して管理したらいいよ。

解決する男性

困っている女性

それは、1つ1つフォルダやファイルを調べて、手作業で一覧を作るの?

困っている女性

そんな時間がかかる面倒くさい作業はできないよ。
それなら、VBAを使えばボタン1つ押すだけで、フォルダ階層を回帰的に調べて一覧化することができるよ。

解決する男性

困っている女性

それそれ、早く教えてよ。

 

もくじ

0.今回作成する機能の概要図

今回作成する機能(サブフォルダを含む全てのフォルダやファイルの情報を取得する)の概要図は、以下です。

サブフォルダを含む全てのフォルダやファイルの情報を取得するの概要図

サブフォルダを含む全てのフォルダやファイルの情報を取得するの概要図

 

フォルダパスを指定すると、そのフォルダに存在するサブフォルダおよびファイル情報を取得し、EXCELシートに出力します。

 

似たような機能については、以下の記事で説明しています。

指定したフォルダ配下のフォルダサイズを調べたい 【EXCEL:VBA】各フォルダのサイズを一覧化したい(簡単3ステップ)

 

指定したフォルダに存在するファイル名を変更したい 【EXCEL:VBA】指定フォルダのファイルの名前を一気に変更したい(簡単3ステップ)

 

指定したフォルダに存在するファイル一覧を取得する 【EXCEL:VBA】指定したフォルダに存在するファイル一覧を取得したい

 

指定したフォルダを作成したい 【EXCEL:VBA】一括で大量にフォルダを作成したい

 

それでは、サブフォルダを含む全てのフォルダやファイルの情報を取得する機能について、1つ1つ順番に説明していきます。

1.サブフォルダを含む全てのフォルダやファイルの情報を出力するシートを準備する

まず、取得した情報を出力するシートを作成します。

「メイン」シートを作成する

メインシートを作成する

メインシートを作成する

 

  1. 「メイン」という名前のシートを作成します。
  2. A1セルに「フォルダパス」のタイトルを作成します。
  3. B1セルに「ファイル名」のタイトルを作成します。
  4. C1セルに「更新日時」のタイトルを作成します。
  5. D1セルに「種類」のタイトルを作成します。
  6. E1セルに「サイズKB」のタイトルを作成します。
  7. 2行目以降は、取得したフォルダやファイル情報が出力されます。

 

2行目以降には、VBAプログラムが取得したフォルダやファイル情報を出力します。

 

2.VBAでフォルダやファイル情報を取得する機能を作成する

「Microsoft Visual Basic for Applications」を起動します。

VBAプログラムを記入する(その1)

VBAプログラムを記入する(その1)

 

標準モジュールを追加して、以下のソースを書きます。

 

フォルダおよびファイル情報をEXCELに出力する機能が以下のVBAプログラムです。

VBAプログラムを記入する(その2)

VBAプログラムを記入する(その2)

 

次に、以下のソースも標準モジュールに書きます。

 

最後にEXCELを「◯◯◯.xlsm」というような感じでマクロ有効ブック形式で保存します。

 

3.指定したフォルダ配下の全てのフォルダやファイル情報を取得する機能の使い方

それでは、指定したフォルダ配下の全てのフォルダやファイルの情報を取得する方法を説明します。

 

「開発」タブの「マクロ」をクリックします。

マクロを実行する

マクロを実行する

 

先程作成した「MainProc」を選択し、実行ボタンをクリックします。

実行ボタンをクリックする

実行ボタンをクリックする

 

フォルダパスを指定するダイアログが表示されます。

調査したいフォルダパスを入力して、OKボタンをクリックします。

フォルダパスを指定する

フォルダパスを指定する

 

しばらく待つと、指定したフォルダに存在するフォルダおよびファイル情報の一覧が2行目以降に作成されます。

フォルダおよびファイル情報一覧が作成された

フォルダおよびファイル情報一覧が作成された

指定したフォルダに存在するサブフォルダおよびファイルの全ての情報が出力されました。

この一覧を作成しておけば、後日追加や変更されたフォルダやファイルについて知ることができます。

 

4.指定したフォルダ配下の全てのフォルダやファイル情報を取得するVBAプログラム(MainProc)の説明

それでは、指定したフォルダ配下の全てのフォルダやファイル情報を取得するVBAプログラム(MainProc)を説明します。

1.フォルダパスを指定する

ここでは、フォルダパスを指定するダイアログを表示させます。

デフォルトのフォルダパスは”D:\”にしています。

ダイアログで入力されたフォルダパスは、変数「folder」に格納します。

 

2.参照するシートを変数に格納する

ここでは、このあとの処理で何度も使う「メイン」シートを変数に格納しています。

そうすることにより、入力するプログラムを短くすることができるからです。

何度も「ThisWorkbook.Sheets(“メイン”)」と入力するより、「shtMain」と入力するほうが少なくすむからです。

 

3.データ入力されているA列の最終行を取得する

前回の実行で残っている情報をクリアするために、メインシートのA列に入力されている最終行を取得します。

取得した最終行番号を変数「maxRow」に格納します。

 

4.最終行が2行目以降なら、2行目以降のデータをクリアする

ここでは、先程取得した最終行が2行目以上の場合、A2セルからE列の最終行までを対象にセルの値をクリアします。

最終行が2行目より小さい場合は、タイトル行のみの状態なのでセルの値をクリアする必要がありません。

 

5.FileSystemObjectを変数に格納する

ここでは、「FileSystemObject」オブジェクトを変数に格納して、このあとの処理で利用できるようにします。

「FileSystemObject」はファイル操作やフォルダ操作をVBAで行うときに大変お世話になる便利なライブラリです、覚えておくと良いです。

 

6.指定したフォルダの情報をシートに出力する

ここでは、このあと作成するVBA関数「WriteInfo」を呼び出しています。

この関数には、フォルダパス、FileSystemObject、現在行、書き込みしたいシートを指定しています。

 

7.FileSystemObjectをクリアする

ここでは、これまで使ってきた「FileSystemObject」をクリアしています。

クリアしないと、ファイル情報をつかんだままになりますので、ご注意ください。

 

5.指定したフォルダ配下の全てのフォルダやファイル情報を取得するVBAプログラム(WriteInfo)の説明

それでは、今回の機能の心臓部分となる「WriteInfo」について説明します。

1.エラーを無視して次の処理を続行する

ここでは、このあとの処理でエラーが発生しても、無視して次の処理を行うようにしています。

フォルダやファイルの情報を取得する権限がない場合にエラーが発生します。

そういうエラーを無視して全ての処理を最後まで実行します。

 

2.フォルダオブジェクトを取得する

ここでは、このあとの処理で何度も使用するフォルダオブジェクトを取得します。

引数で渡されたフォルダのフォルダオブジェクトになります。

 

3.フォルダパスを出力する

ここでは、A列にフォルダパスを出力します。

 

4.フォルダの更新日時を出力する

ここでは、C列にフォルダの更新日時を出力します。

 

5.フォルダの種類を出力する

ここでは、D列にフォルダの種類を出力します。

種類といっても、「ファイル フォルダー」という文字列になります。

 

6.フォルダのサイズを出力する(EXCELのRoundup関数を使って、キロバイト単位にする)

ここでは、フォルダのサイズをE列に出力します。

フォルダサイズは、キロバイト単位にするため、1024で割ります。

EXCELのRoundUp関数を使って、整数に切り上げています。

 

7.指定されたフォルダに存在するファイル数分、以降の処理を繰り返す

ここでは、引数で渡されたフォルダに存在するファイル数分、以降の処理を繰り返します。

ファイルが5個存在すれば、5回以降の処理を繰り返します。

 

8.フォルダパスを出力する

ここでは、ファイルのフォルダパスをA列に出力します。

 

9.ファイル名を出力する

ここでは、ファイル名をB列に出力します。

 

10.更新日時を出力する

ここでは、ファイルの更新日時をC列に出力します。

 

11.ファイルの種類を出力する

ここでは、ファイルの種類をD列に出力します。

 

12.ファイルのサイズを出力する(EXCELのRoundup関数を使って、キロバイト単位にする)

ここでは、ファイルのサイズをE列に出力します。

ファイルサイズは、キロバイト単位にするため、1024で割ります。

EXCELのRoundUp関数を使って、整数に切り上げています。

 

13.現在のフォルダに存在するサブフォルダ数分、以降の処理を繰り返す

ここでは、引数で渡されたフォルダに存在するサブフォルダ数分、以降の処理を繰り返します。

サブフォルダが5個存在すれば、5回以降の処理を繰り返します。

 

14.指定したフォルダの情報をシートに出力する

ここでは、自分自身「WriteInfo」関数を呼び出しています。

つまり、サブフォルダについて、フォルダやファイル情報を取得するようにしています。

もし、サブフォルダのサブフォルダが存在する場合、さらに下に向かって繰り返したどっていきます。

このようにすることにより、階層的にフォルダをたどり、情報を取得することができます。

 

それでは、指定したフォルダのサブフォルダを含む全てのフォルダやファイルの情報を取得する機能を利用してください。

 

以上です。

 

 

最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です