Excel VBAを使用して特定のディレクトリ内のファイル名を一覧化し、それをファイルの更新日時に基づいて順番に並べ替える方法です。
【Excel・VBA】フォルダ内のファイル名を取得しシートに書き出す
エクセルVBAを使ってファイル名やフォルダ名を取得する方法です。 他の方法 PowerShellを使う方法 コマンドプロンプトによる方法 パスのコピーによる方法 ファイル名を...
以下はフォルダ内のファイル名またはフォルダ名、リンクをリスト化します。
Excel VBAでフォルダ内のファイルとフォルダをリスト化するコード
Excel VBAを使用して、指定したフォルダ内のファイルとフォルダを一覧化するコードです。 このコードでは、フォルダ内のすべてのアイテムをリスト化し、開いているファ...
目次
ファイル名の書き出し例
一覧化した結果です。
- ファイル保存先: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
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
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
以下のコードはプロジャーで分けてるだけで、上記と同じです。
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行目:データを作成日時で昇順にソート