VBAでフォルダ内の「最近更新されたファイルだけを開く」には、FileSystemObjectの DateLastModified プロパティで各ファイルの最終更新日時を取得し、日数条件と比較するだけで実現できます。日々増え続けるファイルの中から、前回作業したものだけをサッと開く処理に活用できます。
この記事では、次の内容を順番に解説します。
- 更新日時をもとに最近のファイルだけを開く基本コード
- 日数条件・拡張子・ファイル名の絞り込みパターン
- 最終更新日時が最も新しい1ファイルだけを開く方法
- 開いたファイルをシートに一覧記録する応用パターン
更新日時をチェックして最近のファイルを開くには?
FileSystemObjectの DateLastModified プロパティでファイルの最終更新日時を取得し、「現在日時から3日前」などの基準日と比較します。基準日以降に更新されたファイルだけを Workbooks.Open で開く、というのが基本の流れです。
Sub OpenRecentFiles()
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim path As String
Dim dtLimit As Date
'ダイアログでフォルダを選択
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show <> -1 Then Exit Sub
path = .SelectedItems(1) & "¥"
End With
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(path)
'3日以内に更新されたファイルのみ対象
dtLimit = Now - 3
For Each file In folder.Files
If file.DateLastModified >= dtLimit Then
Workbooks.Open file.Path
End If
Next file
End Sub
DateLastModified はファイルを上書き保存したときに更新される日時です。Now - 3 で「現時点から3日前」の日時を計算し、それより新しいファイルだけを開きます。
| プロパティ・書き方 | 内容 | 例 |
|---|---|---|
file.DateLastModified | ファイルの最終更新日時 | 2026/04/14 09:23:00 |
Now - 3 | 現在から3日前の日時 | 2026/04/13 → 2026/04/10 |
Date | 今日の日付(0時0分0秒) | 当日更新分だけに絞りたい場合に使う |
拡張子やファイル名でさらに絞り込むには?
フォルダにExcel以外のファイルも混在している場合は、拡張子やファイル名の条件を追加して絞り込みます。Right 関数で拡張子を確認するか、InStr 関数でファイル名に特定の文字列が含まれるかチェックします。
Sub OpenRecentExcelFiles()
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim path As String
Dim dtLimit As Date
Dim ext As String
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show <> -1 Then Exit Sub
path = .SelectedItems(1) & "¥"
End With
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(path)
dtLimit = Now - 7 '7日以内に更新されたファイルが対象
For Each file In folder.Files
ext = LCase(fso.GetExtensionName(file.Name))
'拡張子がxlsxまたはxlsmのファイルのみ対象
If (ext = "xlsx" Or ext = "xlsm") And _
file.DateLastModified >= dtLimit Then
Workbooks.Open file.Path
End If
Next file
End Sub
ファイル名に特定のキーワードが含まれるものだけに絞りたい場合は、InStr を使います。
'「売上」という文字を含むファイルだけに絞る例
If InStr(file.Name, "売上") > 0 And file.DateLastModified >= dtLimit Then
Workbooks.Open file.Path
End If
最も新しい1ファイルだけを開くには?
「最近のファイルを全部開く」ではなく、「最終更新日時が一番新しい1ファイルだけを開く」場合は、ループで最新日時を更新しながら対象ファイルを絞り込みます。
Sub OpenLatestFile()
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim path As String
Dim latestFile As Object
Dim latestDate As Date
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show <> -1 Then Exit Sub
path = .SelectedItems(1) & "¥"
End With
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(path)
latestDate = 0 '初期値は最古の日時
For Each file In folder.Files
If LCase(fso.GetExtensionName(file.Name)) = "xlsx" Then
If file.DateLastModified > latestDate Then
latestDate = file.DateLastModified
Set latestFile = file
End If
End If
Next file
'最新ファイルが見つかった場合だけ開く
If Not latestFile Is Nothing Then
Workbooks.Open latestFile.Path
MsgBox "最新ファイルを開きました:" & latestFile.Name
Else
MsgBox "対象ファイルが見つかりませんでした。"
End If
End Sub
開いたファイルをシートに一覧記録するには?
どのファイルを開いたかをシートに記録しておくと、後から確認しやすくなります。ファイル名・パス・更新日時をセットで書き出す例です。
Sub OpenAndLogRecentFiles()
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim path As String
Dim dtLimit As Date
Dim ws As Worksheet
Dim row As Integer
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show <> -1 Then Exit Sub
path = .SelectedItems(1) & "¥"
End With
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(path)
Set ws = ThisWorkbook.Sheets("ログ")
dtLimit = Now - 3
row = 2
'見出し行を書き込む
ws.Cells(1, 1).Value = "ファイル名"
ws.Cells(1, 2).Value = "パス"
ws.Cells(1, 3).Value = "最終更新日時"
For Each file In folder.Files
If file.DateLastModified >= dtLimit Then
Workbooks.Open file.Path
ws.Cells(row, 1).Value = file.Name
ws.Cells(row, 2).Value = file.Path
ws.Cells(row, 3).Value = file.DateLastModified
row = row + 1
End If
Next file
MsgBox row - 2 & " 件のファイルを開きました。"
End Sub
まとめ
DateLastModifiedでファイルの最終更新日時を取得し、Now - 日数と比較するのが基本- 当日分のみに絞りたい場合は
dtLimit = Date、7日以内ならdtLimit = Now - 7に変えるだけ GetExtensionNameで拡張子を確認すると、Excelファイルだけに絞り込めるInStrでファイル名にキーワードが含まれるかチェックすれば、用途別の絞り込みにも対応できる- 最新の1ファイルだけ開きたい場合は、ループで 最大日時を更新しながら対象を絞る 方法を使う
よくある質問
DateLastModified と DateCreated の違いは何ですか?
DateLastModified はファイルを最後に上書き保存した日時、DateCreated はファイルを最初に作成した日時です。「最近使ったファイル」を対象にする場合は DateLastModified を使います。ファイルをコピーした場合、DateCreated はコピー日時に更新されますが、DateLastModified は元の更新日時が引き継がれることがあります。
サブフォルダの中のファイルも対象にできますか?
できます。FSOの folder.SubFolders を使ってサブフォルダを再帰的に処理する関数を作れば対応できます。ただしファイル数が多い場合は処理時間がかかるため、対象フォルダの範囲は必要最小限に絞ることをおすすめします。
一度に大量のファイルが開いてしまいます。上限を設けることはできますか?
できます。カウンター変数を用意して、開いたファイル数が上限に達したら Exit For でループを抜けるようにします。たとえば If openCount >= 5 Then Exit For のように記述することで、最大5ファイルまでに制限できます。
ファイルダイアログを使わずにパスを直接指定できますか?
できます。path = "C:¥Data¥作業フォルダ¥" のようにパスを直接変数に代入すればダイアログは不要です。毎回同じフォルダを対象にする場合はパスを固定した方が手間が省けます。
開いたファイルを確認せずに自動処理するのが不安です
まずは Workbooks.Open を MsgBox file.Name に置き換えて、対象ファイルの一覧だけを表示するテスト実行をおすすめします。開く前に「このファイルを開きますか?」という確認ダイアログを入れる場合は、MsgBox に vbYesNo を組み合わせて、「はい」を選んだときだけ開く処理にするとより安全です。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



