【PR】AccessやVBAの基礎をしっかり学びたい方には、
以下の入門書が分かりやすくておすすめです。
今回のような“テーブル構造”や“VBAでの自動化”を理解しやすくなります
Access を使って実務をしていると、
フォルダ内のファイルを一覧化して
Excel
Accessテーブル
CSV
などへ出力したい場面はよくあります。
特に、
請求書PDFの一覧
日次データ(CSV)の一覧
フォルダ監査
画像ファイルの管理
こういった業務で「フォルダ内ファイル一覧」が大活躍します。
この記事では、
Access VBA を使ってフォルダ内ファイル名を一覧取得し、
Excel に出力する方法を完全解説します。
すべて コピペで動く コードだけを掲載しています。
フォルダ内のファイル一覧を取得する基本(Dir関数)
Access でファイル名一覧を取得する場合、
最もシンプルなのは Dir関数 を使う方法です。
Dir関数の基本(最初の1件+次の件)
fname = Dir(“C:\Data\*.pdf”) ‘最初の1件
fname = Dir() ‘次のファイル
Accessでファイル名一覧をExcelに出力する全体コード
以下のコードをフォームのボタンに貼るだけで動きます。
フォルダ内ファイル一覧を Excel へ出力する完全コード(コピペ可)
Private Sub コマンド0_Click()
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
Dim fPath As String
Dim fname As String
Dim row As Long
‘=== ① 取得対象フォルダ ===
fPath = “C:\Data\PDF\” ‘最後は「\」で終わること
‘=== ② Excel起動 ===
Set xlApp = CreateObject(“Excel.Application”)
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
xlApp.Visible = True
‘=== ③ 1行目に見出し ===
xlSheet.Range(“A1”).Value = “ファイル名”
xlSheet.Range(“B1”).Value = “更新日”
xlSheet.Range(“C1”).Value = “サイズ(Bytes)”
row = 2
‘=== ④ Dirでファイル一覧取得 ===
fname = Dir(fPath & “*.*”) ‘すべてのファイル
Do While fname <> “”
xlSheet.Cells(row, 1).Value = fname
xlSheet.Cells(row, 2).Value = FileDateTime(fPath & fname)
xlSheet.Cells(row, 3).Value = FileLen(fPath & fname)
row = row + 1
fname = Dir() ‘次のファイル
Loop
MsgBox “Excelへの出力が完了しました。”
End Sub
特定の種類だけ取得したい場合(PDFだけ、Excelだけ)
PDFのみ
fname = Dir(fPath & “*.pdf”)
Excelファイルのみ
fname = Dir(fPath & “*.xlsx”)
画像ファイル
fname = Dir(fPath & “*.jpg”)
フォルダ選択ダイアログを使う(実務で便利)
毎回パスを書き換えるのが面倒な場合は、
ユーザーがフォルダを選べるようにします。
フォルダ選択ダイアログ付きコード
Private Function SelectFolder() As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = “フォルダを選択してください”
If .Show = -1 Then
SelectFolder = .SelectedItems(1) & “\”
Else
SelectFolder = “”
End If
End With
End Function
呼び出し側:
fPath = SelectFolder()
If fPath = “” Then Exit Sub
ファイル一覧をAccessテーブルにも保存できる
Excelでなく Access テーブルへ保存したい場合はこちら。
Accessテーブルへ追加するコード
CurrentDb.Execute _
“INSERT INTO T_FileList (FileName, UpdateDate, Size) ” & _
“VALUES(‘” & fname & “‘,#” & FileDateTime(fPath & fname) & “#,” & FileLen(fPath & fname) & “)”
よくあるエラーと対策
フォルダパスの末尾に「\」がない
→ "C:\Data" では動かない
→ "C:\Data\" と最後に「\」が必要
対象ファイルが0件
→ Dir() が空のまま
→ "*.pdf" や "*.*" の指定を確認
Excel が既に開いていて競合
→ 実行前にExcelを閉じるか、内部で new instance を開く
補足リンク(関連記事)
まとめ
Access VBA でフォルダ内ファイル一覧を簡単に取得できる
Dir関数でファイル名、FileDateTimeで更新日、FileLenでサイズが取れる
Excel出力、Accessテーブル格納など応用が多い
フォルダ選択ダイアログを使えば実務にそのまま使える
コードはすべてコピペで動作する
