Contents
フォルダ内のファイル名を手で一覧化するの、つらくないですか?
毎月の報告資料づくりや、ファイルチェック作業で
「フォルダにあるファイル名を全部Excelに貼り付けたい…」
そんな場面、よくありますよね。
しかし、手作業で1つずつコピペするのは時間がかかるし、ミスも起きやすい。
この記事では、フォルダのパスを入力するだけで、
一瞬でファイル名リストを自動作成できるVBA を紹介します。
なぜ多くの人がつまずくのか(業務でよくあるシーン)
- 日報の添付ファイルチェック
- 設計データの版管理
- 複数部署から提出されたファイルの一覧化
- 監査資料の確認(ファイル存在チェック)
「ファイルが増えたり入れ替わったりするたびに手動で更新」
これがストレスの元です。
Before:手作業でファイル名をまとめると何が起きる?
手作業コピペの問題点
- 時間がかかる:フォルダを開いて → 名前をコピー → Excelに貼る…の繰り返し
- ミスが起きやすい:1つ抜けていた、順番が違っていた、など
- 更新が面倒:追加・削除があるたびにやり直し
After:VBAで一覧作成するとこう変わる
一瞬で最新リストが作れる
フォルダパスを入力してボタンを押すだけで、
その時点の最新ファイル一覧が自動で取得できます。
fileSystemObject を使うと何が便利?
fileSystemObject(ファイルやフォルダを扱う仕組み)を使うと
- ファイル名の取得
- サイズや更新日時の取得
- サブフォルダの探索
…などが簡単に扱えます。
事前準備:コードを動かすために必要なもの
1. Excelマクロの有効化とVBEの開き方
- Excelを開き、
ALT + F11でVBE(マクロを書く画面)を開く - 「挿入 → 標準モジュール」を選び、コードを貼り付ける
.xlsm形式で保存する
※参照設定は不要。初心者でも混乱しないように、
VBAから直接fileSystemObjectを作成する方法を使います。
2. フォルダパスの準備
例:C:\Users\user\Documents\TestFolder
【基本版】コピペで使える!フォルダ内のファイル名を一括取得するVBA
▼ 基本コード(フォルダ直下のファイルのみ)
Sub GetFileList_Basic()
Dim targetPath As String
Dim fso As Object 'fileSystemObject
Dim folder As Object
Dim file As Object
Dim i As Long
'フォルダパスをメッセージで入力
targetPath = InputBox("一覧を作成したいフォルダのパスを入力してください。")
If targetPath = "" Then
MsgBox "処理を中止しました。"
Exit Sub
End If
'fileSystemObject を作成
Set fso = CreateObject("Scripting.FileSystemObject")
'指定フォルダを取得
On Error Resume Next
Set folder = fso.GetFolder(targetPath)
If folder Is Nothing Then
MsgBox "フォルダパスが正しくありません。確認してください。"
Exit Sub
End If
On Error GoTo 0
'出力先を初期化
Cells.ClearContents
Range("A1").Value = "ファイル名"
i = 2
'フォルダ内のファイルを列挙
For Each file In folder.Files
Cells(i, 1).Value = file.Name
i = i + 1
Next file
MsgBox "一覧作成が完了しました!"
End Sub
▼ 使い方(初心者向け)
- 上のコードを標準モジュールに貼り付ける
- マクロを実行すると「フォルダパス入力BOX」が出る
- 対象フォルダのパスを貼り付けて OK
- シートにファイル名が一覧で表示される
【応用版】サブフォルダも含める・拡張子で絞り込みたい場合
1. サブフォルダも含めて取得(再帰処理)
Sub GetFileList_WithSubFolder()
Dim targetPath As String
Dim fso As Object
targetPath = InputBox("一覧を作成したいフォルダのパスを入力してください。")
If targetPath = "" Then Exit Sub
Set fso = CreateObject("Scripting.FileSystemObject")
Cells.ClearContents
Range("A1").Value = "フォルダ"
Range("B1").Value = "ファイル名"
Call SearchFolder(fso.GetFolder(targetPath), 2)
MsgBox "サブフォルダを含めた一覧を作成しました!"
End Sub
Sub SearchFolder(targetFolder As Object, ByVal rowIndex As Long)
Dim file As Object
Dim subFolder As Object
'ファイルを出力
For Each file In targetFolder.Files
Cells(rowIndex, 1).Value = targetFolder.Path
Cells(rowIndex, 2).Value = file.Name
rowIndex = rowIndex + 1
Next file
'サブフォルダを再帰的に検索
For Each subFolder In targetFolder.SubFolders
rowIndex = SearchFolder(subFolder, rowIndex)
Next subFolder
End Sub
2. 「.xlsx だけ」など拡張子で絞り込みたい場合
If LCase(fso.GetExtensionName(file.Name)) = "xlsx" Then
'ここだけ出力する
End If
よくあるエラーとつまづきポイント
1. パスが間違っている場合
- 症状:メッセージで「フォルダパスが正しくありません」と表示
- 対処:フォルダを右クリック → パスをコピー で正しい文字列を使用
2. 参照設定は必要?
今回のコードは CreateObject を使っているため、
「参照設定」をいじる必要はありません。初心者でも安心です。
3. ファイルが多すぎて遅い場合
- 数万ファイルを扱うとExcelが重くなる
- 対応策:
- サブフォルダを分けて処理
- 絞り込み(拡張子フィルタ)を利用
- 一覧作成だけなら CSV に出力する方法も可
まとめ:作業時間が大幅に削減される
手作業でやっていたファイル名リスト作成が、
たった数秒で自動化されるようになります。
業務の報告資料づくり、監査対応、ファイル管理など、
さまざまなシーンで活用できるので、ぜひ一度試してみてください。
最後に…
もし「自分用にもっとカスタムしたい」「業務に合わせた自動化が必要」などあれば、
ココナラでも気軽に相談いただけます。あなたの業務効率化をお手伝いします。