今回は、VBAを使って指定したフォルダ内のファイル名を一覧で取得してシートに書き出す方法をご紹介します。
VBAの詳しい説明は別の記事にまとめていますので、そちらも参考にしてください。
※今回のサンプルは、Windowsで使用することを想定しています
準備
- Excelの「開発」タブを表示
VBAを使うには「開発」タブが必要です。 - VBAエディタの起動
「開発」タブの「Visual Basic」をクリックし、VBAエディタを開きます。
※書き出したいフォルダとファイルの準備も必要です
サンプルコード
- 新しいモジュールを追加
VBAエディタのメニューから「挿入」→「標準モジュール」を選択し、新しいモジュールを追加します。 - コードを貼り付ける
以下のコードをモジュールに貼り付けてください。
Sub ListFilesWithDetails()
Dim folderPath As String
Dim ws As Worksheet
Dim i As Long
Dim sheetName As String
Dim ans As VbMsgBoxResult
' フォルダ選択ダイアログ
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択してください"
If .Show <> -1 Then Exit Sub
folderPath = .SelectedItems(1)
End With
' シート名の入力
sheetName = InputBox("出力先のシート名を入力してください", "シート名指定", "ファイル一覧")
If sheetName = "" Then Exit Sub
' すでにシートが存在するか確認
On Error Resume Next
Set ws = Worksheets(sheetName)
On Error GoTo 0
If Not ws Is Nothing Then
ans = MsgBox("シート「" & sheetName & "」はすでに存在します。上書きしますか?", vbYesNo + vbExclamation)
If ans = vbNo Then Exit Sub
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
End If
' 新しいシート作成
Set ws = Worksheets.Add
ws.Name = sheetName
' ヘッダー
ws.Cells(1, 1).Value = "ファイル名"
ws.Cells(1, 2).Value = "フルパス"
ws.Cells(1, 3).Value = "更新日時"
ws.Cells(1, 4).Value = "サイズ(KB)"
i = 2
' ファイル一覧取得
Call GetFilesRecursive(folderPath, ws, i)
' 表の整形
ws.Columns("A:D").AutoFit
MsgBox "完了しました!", vbInformation
End Sub
Sub GetFilesRecursive(ByVal folderPath As String, ByRef ws As Worksheet, ByRef rowIndex As Long)
Dim fso As Object, folder As Object, file As Object, subFolders As Object, subF As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folderPath)
' ファイル一覧取得
For Each file In folder.Files
ws.Cells(rowIndex, 1).Value = file.Name
ws.Cells(rowIndex, 2).Value = file.Path
ws.Cells(rowIndex, 3).Value = file.DateLastModified
ws.Cells(rowIndex, 4).Value = Round(file.Size / 1024, 1)
rowIndex = rowIndex + 1
Next
' サブフォルダも再帰的に処理
Set subFolders = folder.SubFolders
For Each subF In subFolders
GetFilesRecursive subF.Path, ws, rowIndex
Next
End Sub
今回は、サンプルフォルダの中に食べ物の名前をつけたファイルを用意しました。

実行方法
1.コードを貼り付けたら、VBAエディタを閉じて「開発」タブの「マクロ」をクリックして実行
2.書き出したいフォルダを指定して、OKをクリック

3.シート名を入力して、OKをクリック
※すでにあるシート名を入力すると、上書きして良いか確認するポップアップが表示されて、許可すると上書きされる

4.処理が終わると、完了が表示されて、入力したシートに ファイル名/フルパス/更新日時/サイズ が出力される


まとめ
VBAを勉強し始めて、実際に動くコードが見たい方や、業務でファイル名をリストで出したい方の役に立てればと思い、コピペですぐに使えるサンプルコードを載せています。
次回は、より詳しくコードの解説をしていきますので、アレンジしたい方や理解を深めたい方は是非ご覧ください!
別投稿で、CSVファイルの内容をExcelに転記する方法も紹介しています!