Excel VBAを使用して特定のディレクトリ内のファイル名を一覧化し、それをファイルの更新日時に基づいて順番に並べ替える方法です。
【Excel・VBA】フォルダ内のファイル名を取得しシートに書き出す
エクセルVBAを使ってファイル名やフォルダ名を取得する方法です。 他の方法 PowerShellを使う方法 コマンドプロンプトによる方法 パスのコピーによる方法 【ファイル名...
目次
ファイル名の書き出し例
一覧化した結果です。
- ファイル保存先:C:\Users\user\Downloads
- ファイル名書き出し先:開いているエクセルブックのシート「Sheet1」
サブプロシージャを使用でファイル名取得
サブプロシージャを使用して機能を分割するとコードがより整理されます。修正や拡張がしやすいです。
Sub sample2() Dim fPath As String Dim f_name As String Dim i As Long Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") ' ワークシートの指定 ws.Range("A2:B" & ws.Rows.Count).ClearContents ' データをクリア fPath = "C:\Users\user\Downloads" ' フォルダのパス ListFilesInFolder fPath, ws ' ファイル情報をシートに書き込み SortDataByFileNames ws ' データをファイル名で昇順にソート End Sub
ファイルの一覧を取得するために 「ListFilesInFolder 」という名前のサブプロシージャを使用しています。
Sub ListFilesInFolder(ByVal folderPath As String, ByRef ws As Worksheet) Dim f_name As String Dim i As Long Dim fso As Object Dim folder As Object Dim file As Object Set fso = CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(folderPath) i = 2 For Each file In folder.Files ws.Cells(i, 2).Value = file.Name ws.Cells(i, 1).Value = file.DateLastModified i = i + 1 Next file End Sub
説明
- 12~16行目:フォルダ内のファイルを For Each ループを使用して処理します。
- 14行目:ファイルの日時情報は file.DateLastModified を使用しています。
ファイルをソートするために「 SortDataByFileNames」 という名前のサブプロシージャを使用しています。
Sub SortDataByFileNames(ByRef ws As Worksheet) With ws.Sort .SortFields.Clear .SortFields.Add Key:=ws.Range("A:A"), Order:=xlAscending .SetRange ws.Range("A1:B" & ws.Cells(ws.Rows.Count, 2).End(xlUp).Row) .Header = xlYes .Apply End With End Sub
Dir関数でフォルダ内のファイル名書き出しと並べ替え
ファイルの一覧を取得するために Dir関数を使用した例です。
Sub sample() Dim fPath As String Dim f_name As String Dim i As Long Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") ' ワークシートの指定 ws.Range("A2:B" & ws.Rows.Count).ClearContents ' データをクリア fPath = "C:\Users\user\Downloads" ' フォルダのパス f_name = Dir(fPath & "\*") ' フォルダ内のファイルを取得 ChDir fPath & "\" ' ワークディレクトリを設定 i = 2 ' ファイル情報をシートに書き込み Do Until f_name = "" ws.Cells(i, 1).Value = f_name ws.Cells(i, 2).Value = FileDateTime(f_name) i = i + 1 f_name = Dir Loop With ws.Sort ' データを作成日時で昇順にソート .SortFields.Clear .SortFields.Add Key:=ws.Range("B:B"), Order:=xlAscending .SetRange ws.Range("A1:B" & ws.Cells(ws.Rows.Count, 2).End(xlUp).Row) .Header = xlYes .Apply End With End Sub
説明
- 7行目:ワークシートの指定
- 8行目:データをクリア
- 9行目:フォルダのパス
- 10行目:フォルダ内のファイルを取得
- 11行目:ワークディレクトリを設定
- 13~19行目:フォルダ内のファイルを反復処理するために Do Until ループを使用しています。
- 16行目:ファイルの日時情報は FileDateTime 関数を使用しています。
- 21~27行目:データを作成日時で昇順にソート