Access を使って実務をしていると、
フォルダ内のファイルを一覧化し、
・Excelへ出力したい
・Accessテーブルに保存したい
・CSVとして管理したい
といった場面はよくあります。
特に、
・請求書PDFの一覧管理
・日次データ(CSV)の確認
・フォルダ監査や棚卸し
・画像ファイルの整理
などの業務では、
「フォルダ内ファイル一覧を取得する処理」が非常に役立ちます。
この記事では、
**Access VBA を使ってフォルダ内のファイル名を一覧取得し、Excelへ出力する方法**を中心に解説します。
VBAでExcelを操作し、
セルに書き込み・保存するまでの流れを、
**すべてコピペで動くコード付き**でまとめています。
「Access VBAでExcelに出力したい」「Excel操作まで含めて実装したい」
という方に向けた実践的な内容です。
フォルダ内のファイル一覧を取得する基本(Dir関数)
Access でファイル名一覧を取得する場合、
最もシンプルなのは Dir関数 を使う方法です。
Dir関数の基本(最初の1件+次の件)
fname = Dir(“C:\Data\*.pdf”) ‘最初の1件
fname = Dir() ‘次のファイル
Access VBAでファイル一覧を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
Access VBAでExcelを操作するポイント(セル指定・保存)
-
Excelを開く
-
書き込む
-
保存して閉じる
👉 コードは既存のものを流用
特定の種類だけ取得したい場合(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テーブル格納など応用が多い
-
フォルダ選択ダイアログを使えば実務にそのまま使える
-
コードはすべてコピペで動作する
リンク