Excel VBAを使って作成するファイル一覧の仕様について考える
【環境】Windows 10 Pro 64bit、Excel for Office 365
Excel VBAを使用して、Excelシート上にカレントフォルダ配下のファイルを一覧する単純なツールをFileSystemObjectを使用して作成し、VBAの勉強をしていきます
どんなファイル一覧を作成するのか、仕様を考えていきましょー
■ファイル一覧
簡単なファイル一覧を作成するのに、仕様書を作るまでもないと考えていますが、作成後のイメージは必要と思いますので、以下に載せておきます
シートの構成は以下の2つで、それぞれの画面イメージを載せていますが、シートを分けたのはセル幅を気にしただけのようにも見えますが、出力シートを都度指定できるようにするため、出力は別シートとしているのです!w
- 入力用の表紙シート
- 出力用の一覧シート


■入力用シート
入力する情報(プロパティ)としては、以下の3点くらいで良いかと考えています
- どこのフォルダを一覧するのか?
- どんなファイルを一覧するのか?
- どのシートに出力するのか?
実施する処理(メソッド)としては、以下の4点くらいかと考えました
- フォルダパスを指定する
- フォルダパスを消す
- 一覧を作成する
- 一覧を消す

・どこのフォルダ
どこのフォルダにあるファイルを一覧するのか、それを指定するために、カレントフォルダの入力欄をシートに作成します
・どんなファイル
今回は、拡張子が同じでもプレフィックスが一致するようなファイルのみを抽出したいなどもあるかと思い、ワイルドカードを使用してLIKE検索するようにしたいと思います
ファイルを絞り込むのに、拡張子だけでいいのならば、拡張子を選択するような機能にしてもよいかと思いますし、ワイルドカードではなく、正規表現で一致させる方法もあるでしょう
複数の拡張子やパターンが入力できても良いかも知れませんね!
・どのシート
出力先のシート名はハードコーディングで固定でも良かったんですが、一覧の出力結果を残しておけるように、シート名を都度設定できるようにしてみます
この場合、存在しないシートは作成するのか、存在しないからエラーとするのか、決めるべきところが残りますが、それはおいおい考えていきます
・フォルダパスを指定する
手入力でもいいのですが、勉強のために「参照」ボタンを作成して、フォルダを指定できるようにしてみます
今回はカレントフォルダとしていますので、指定したフォルダの配下にあるサブフォルダも全て検索する対象としていきます
・フォルダパスを消す
入力欄をクリアするのもボタンを作成して行います!w
セルを選択して、Deleteキーを押下するだけですが、ボタン一つで処理するようにします
・一覧を作成する
ファイル一覧を作成するボタンを配置します
カレントフォルダが指定されていなければ、存在しなければ、メッセージを表示して処理を行わないとします
今回は、FileSystemObjectを使用して、まずはファイル(Fileオブジェクト)をコレクション(Collection)に格納して、全てのファイルを検索後に一覧を作成するようにします
・一覧を消す
シートを削除するのか、結果の一覧部分だけを消去するのか、考えるところはありますが、とりあえずは指定した出力シートの出力内容を消すようにします
■出力用シート
出力内容をどうしましょうか?と考えたのですが、FileSystemObjectのFIleクラスのメンバを出力しておく程度に留めます

・何を出力する
主力内容は以下になります
- No:ファイル毎に一意の番号
- サブフォルダ名:入力用シートで指定したカレントフォルダからの差分
- ファイル名:対象のファイル名
- タイプ:ファイルタイプ
- サイズ:ファイルサイズ
- 作成日時:ファイルの作成日時
- 更新日時:ファイルの更新日時
■まとめ
いくつか決めなければならない課題が残っていますが、そのあたりは作成しながら、考えていくことにします!
本来は、仕様として決めておくべきことなのでしょうが、そこまでのことはしませんw
■次回
意外と前置きとなる仕様の記載に時間がかかってしまったので、次回に「フォルダ指定の機能」と「クリア」くらいを作成していこうと思います