目次
ファイル一覧を手入力する手間
仕事をしていると書類整理に奪われる時間が非常にもったいなく感じます。
ファイルを探すのに役立つのがファイル一覧表。
しかし新しいファイルが追加されたり削除されたりするとそれに伴って一覧表も更新しなくてはいけません。
そのたびにファイル一覧表を手入力で修正しているとかなり手間がかかる上にミスも発生しやすくなります。
結果、一覧表はあるけど情報が古くて役に立たないといった事態に陥ります。
ファイル一覧表をExcelで自動生成することで大幅な作業効率化に繋がります。
ファイル一覧をVBAで取得する方法
整理するフォルダの例
今回は次のようないくつかのファイルが入ったフォルダを例とします。
![](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_1024,h_629/https://kamelab.info/wp-content/uploads/2020/02/01-1024x629.png)
これらのファイル名全てを一覧表に書き出します。
拡張子も含めたファイル名とします。
更新ボタンの作成
次のようなExcelファイルを作ります。
拡張子は.xlsxではなくマクロ有効ブックの.xlsmにしておきます。
![](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_1024,h_607/https://kamelab.info/wp-content/uploads/2020/02/08-2-1024x607.png)
B2のセルに更新用のボタンを作ります。
「開発」タブの「コントロール」「挿入」「ボタン(フォームコントロール)」を選択します。
もし「開発」タブが無い場合は「オプション」「リボンのユーザ設定」より追加が可能です。
ボタンを追加するとマクロ名の入力を求められます。
今回は「ファイル一覧の更新」とします。
![](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_678,h_627/https://kamelab.info/wp-content/uploads/2020/02/09.png)
「編集」を押すと自動的にVBAが開きます。
ここでエディタには次のコードを入力します。
![](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_1024,h_428/https://kamelab.info/wp-content/uploads/2020/02/03-1024x428.png)
Sub ファイル一覧の更新()
Dim filename As String
Dim count As Long
Const Path As String = "C:\Users\user\Documents\20191201\"
filename = Dir(Path)
Do While filename <> ""
count = count + 1
Cells(count + 4, 2) = filename
filename = Dir()
Loop
End Sub
ソースコードの解説
VBAのコードを1行ずつ解説します。
Sub ファイル一覧の更新()
SubはSubプロシージャを意味します。
マクロを実行するときのひとかたまりを意味します。
上記の例では「ファイル一覧の更新」がSubプロシージャの名称です。
Dim filename As String
Dimは変数の宣言を意味し、「filename」という文字列型(String)の変数をAsで指定しています。
Dim count As Long
こちらは「count」という整数型(Long)の変数です。
Const Path As String = "C:\Users\user\Documents\20191201\"
これはフォルダのパスを意味しています。文字列型(String)の「Path」を定数(Const)として宣言しています。
今回のフォルダはドキュメントフォルダ内の「20191201」というフォルダのため、上記のようなパスになります。
filename = Dir(Path)
Dirがファイル名取得の鍵となる関数です。
引数にパスを入力することでフォルダ内のファイル名を返します。
重要なのが「Dir関数は実行回数に応じて保存期間順にファイル名を順次返す」ということです。
1回目のDir関数と2回目のDir関数では返り値が異なります。
Do While filename <> ""
DoとWhileで条件付きループを定義します。
Dir関数でファイルを全て返し終えたら最後に空白(””)を返すので、それをループから抜ける条件としています。
count = count + 1
カウンタを増やします。
Cells(count + 4, 2) = filename
Cellsの引数は貼り付けたいセルの行番号および列番号に応じて調整します。
filename = Dir()
Dir関数の2回目以降の実行です。
Loop
VBAにおけるループの端を意味します。
End Sub
Subプロシージャの区切りを意味します。
ファイル一覧に番号を割り振っておく
ボタンを押すことでファイル一覧が表示される準備は整いました。
ここで、ファイル一覧が増えたり減ったりすることを考えると番号も流動的に割り振る必要が出てきます。
VBAに組み込んでしまう方法も簡単ですが、単純なのでセルに入力してしまいましょう。
1行目にはセルの値が空白であれば空白を、そうでなければ1を返すようIF関数を定義します。
=IF(B5="","",1)
2行目以降はひとつ上の行に1を加えるだけです。
=IF(B6="","",A5+1)
![](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_1024,h_607/https://kamelab.info/wp-content/uploads/2020/02/06-1024x607.png)
これでファイル一覧の番号割り振りは完了です。
VBAの実行結果
全ての準備が整いました。完成した「ファイル一覧の更新」ボタンをクリックします。
![](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_1218,h_722/https://kamelab.info/wp-content/uploads/2020/02/07-1024x607.png)
ファイル名一覧が表示されました。
ファイルの種類に限らずフォルダ内にあるすべてのファイルが表示されます。
ファイルの種類を選択したい場合はワイルドカード(*)を使用することで実現できます。
これでファイル名を一つひとつ入力するという作業を一気に短縮することが可能となりました。
本サイトではフォルダ一覧表の作成方法も紹介しています。
まとめ
- ファイル一覧表はVBAによって自動生成が可能
- ファイル名の取得はDir関数
- Dir関数とループを組み合わせることで全てのファイル名を表示できる