ファイル名を手入力で書き出していませんか?
「このフォルダの中に、どんなファイルが入ってるか一覧にしたいな…」そんなとき、いちいちファイル名を見て、Excelに手入力していませんか?
もしくは色々と調べて、コマンドプロンプトを使う方法で難しいな、と思っていませんか?
さまざまな方法がありますが、VBAが使えるようになると、実は、たった10行ほどのVBAマクロでそれが自動化できます。
10行すらも書きたくない・・・!と言われると話が進まないのですが、1回作ってしまえば、繰り返し使えるので便利です。
実装するメリット(やることの意味)
- ファイル一覧を一瞬で作成できる
- 入力ミスを防げる
- 手動チェックよりずっと効率的
実際にコードを書いてみましょう
- 指定したフォルダの中にあるファイルを順に取得
- ファイル名だけを取り出す
- Excelのシートに1件ずつ書き込んでいく
Sub ListFileNames()
Dim folderPath As String
Dim fileName As String
Dim i As Long
' 対象フォルダのパス
folderPath = "C:¥Test¥"
' パスの末尾に ¥ がなければ付け足す
If Right(folderPath, 1) <> "¥" Then
folderPath = folderPath & "¥"
End If
' 最初のファイル名を取得
fileName = Dir(folderPath & "*.*")
' A列に1行ずつ出力していく
i = 1
Do While fileName <> ""
Cells(i, 1).Value = fileName
i = i + 1
fileName = Dir() ' 次のファイル
Loop
End Sub
解説
folderPath = "C:¥Test¥"
どのフォルダを調べるかを指定します(ここに記載したフォルダ内のファイル一覧を出します)If Right(folderPath, 1) <> "¥" Then ...
最後が¥
で終わっていない場合、自動で追加します。これがないとDir
がうまく動かないことがあります。fileName = Dir(...)
指定フォルダ内の最初のファイルを取得します。Do While fileName <> ""
ファイルが存在する間だけ繰り返しCells(i, 1).Value = fileName
→ ExcelのA列に1件ずつ書き込む処理です。
よくある質問
Q:フォルダにサブフォルダがある場合は?
→ このコードではサブフォルダ内は対象外です。サブフォルダも含めたい場合は、FileSystemObject
を使った処理が必要です。
Q:ファイルの拡張子も表示されますか?
→ はい、フルのファイル名(例:data1.xlsx
)として表示されます。
Q:ファイル名だけじゃなく、ファイルサイズや日付も知りたい
→ それも可能です。FileLen
や FileDateTime
関数を組み合わせることで実現できます。
応用アイデア
- B列にファイルサイズを追加する
- 条件(拡張子が
.xlsx
だけなど)で絞り込む - 一覧結果をCSVに保存する
これらを少しずつ加えていけば、業務に使える自動化ツールに変わっていきます。
まとめ
今回のコードは、VBAの基本である「ループ」「セルへの出力」「Dir関数」の組み合わせだけで、非常に実用的な処理が実現できる例です。
フォルダを変えるだけで、どんな場所のファイルでも一瞬で一覧化できます。
フォルダについては、今回は直接コードに記載しましたが、選択する方法については、別に記載します。
コメント