「毎回、フォルダを開いて“最新のファイル”を探している…」
「ファイル名が日付入りじゃないから、どれが最新かわかりにくい…」
そんなときに便利なのが、ExcelVBAで「更新日時が一番新しいファイル」だけを自動で開くマクロです。
本記事では、指定したフォルダ内の最新ファイルを1つだけ取得して自動で開く方法を、
初心者の方にも分かりやすいように解説していきます。
完成イメージ
※ファイルの中身は適当に作成してます。ご容赦ください。。。
例えば、同じフォルダに次のようなファイルがあるとします。
売上レポート_2025-10-01.xlsx
売上レポート_2025-10-02.xlsx
売上レポート_2025-10-15.xlsx ← 更新日時が一番新しい
この中から、「最新の1件」だけをVBAで自動で開きます。
この記事はこんな方におすすめ
- 「毎回、最新のExcelファイルを手作業で探して開いている」
- バックアップや日次レポートなど、同じフォルダに似た名前のファイルがたくさんある
- フォルダ内の更新日時を見なくても、ボタン一つで最新ファイルを開きたい
- ExcelVBAでファイル操作を自動化してみたい初心者の方
シートの準備(フォルダパスと拡張子を入力)
まずは、次のようなシートを1枚用意します。
(ここではシート名を 「設定」 とします)

A列 B列
---------------------------------
1 項目名 設定値
2 フォルダパス C:\Test\Reports
3 拡張子 xlsx
4 最新ファイル (マクロ実行後に表示)
5 更新日時 (マクロ実行後に表示)
- B2セル:最新ファイルを探したいフォルダのパス
- B3セル:対象とする拡張子(例:
xlsx、xlsmなど) - B4・B5セル:マクロ実行後に、見つかった最新ファイル名と更新日時を表示
フォルダパスは、エクスプローラーのアドレスバーからコピーして貼り付けると楽です。
末尾の「\」はあってもなくてもOKなように、マクロ側で整えます。
VBAコード(コピペOK)
では、実際に「最新ファイルを開くマクロ」を作成していきます。
まずは、次のコードを標準モジュールに貼り付けてください。
Option Explicit
' フォルダ内の最新ファイル(更新日時が一番新しいファイル)を開くマクロ
Sub OpenLatestFileInFolder()
Dim ws As Worksheet
Dim folderPath As String
Dim fileExt As String
Dim fileName As String
Dim latestFile As String
Dim latestDate As Date
Dim currentFileDate As Date
' 設定シートを指定
Set ws = ThisWorkbook.Worksheets("設定")
' フォルダパスと拡張子を取得
folderPath = ws.Range("B2").Value
fileExt = ws.Range("B3").Value
' 入力チェック
If folderPath = "" Then
MsgBox "B2セルにフォルダパスを入力してください。", vbExclamation
Exit Sub
End If
If fileExt = "" Then
MsgBox "B3セルに拡張子(例:xlsx)を入力してください。", vbExclamation
Exit Sub
End If
' フォルダパスの末尾の「\」を調整
If Right(folderPath, 1) = "\" Then
folderPath = Left(folderPath, Len(folderPath) - 1)
End If
' 最初のファイルを取得
fileName = Dir(folderPath & "\" & "*." & fileExt)
' 該当ファイルが1つもない場合
If fileName = "" Then
MsgBox "指定フォルダ内に ." & fileExt & " のファイルがありません。", vbInformation
Exit Sub
End If
' 最新ファイル情報の初期化
latestFile = fileName
latestDate = FileDateTime(folderPath & "\" & fileName)
' 2つ目以降のファイルを順番にチェック
Do While fileName <> ""
currentFileDate = FileDateTime(folderPath & "\" & fileName)
' より新しいファイルがあれば更新
If currentFileDate > latestDate Then
latestDate = currentFileDate
latestFile = fileName
End If
' 次のファイルを取得
fileName = Dir()
Loop
' 結果をシートに表示
ws.Range("B4").Value = latestFile
ws.Range("B5").Value = latestDate
' 最新ファイルを開く
Workbooks.Open folderPath & "\" & latestFile
MsgBox "最新ファイルを開きました:" & vbCrLf & latestFile, vbInformation
End Sub
コードのポイント解説(初心者向け)
① Dir関数でフォルダ内のファイルを順番に取得
fileName = Dir(folderPath & "\" & "*." & fileExt)
Dir 関数は、フォルダ内のファイル名を取得する関数です。
最初に Dir(パス & パターン) を呼び出すと、
条件に合う最初のファイル名が返ってきます。
そのあと、Dir() を繰り返し呼び出すことで、
次々と別のファイル名を取得することができます。
fileName = Dir(folderPath & "\" & "*." & fileExt)
Do While fileName <> ""
' ここで fileName を使った処理を行う
fileName = Dir() ' 次のファイルへ
Loop
② FileDateTimeで「更新日時」を取得
currentFileDate = FileDateTime(folderPath & "\" & fileName)
FileDateTime 関数は、ファイルの更新日時を返してくれます。
これを使うことで、「どのファイルが一番新しいか」を判定しています。
③ 最も新しいファイルを探すロジック
' 初回のファイルで初期化
latestFile = fileName
latestDate = FileDateTime(folderPath & "\" & fileName)
' 2件目以降との比較
Do While fileName <> ""
currentFileDate = FileDateTime(folderPath & "\" & fileName)
If currentFileDate > latestDate Then
latestDate = currentFileDate
latestFile = fileName
End If
fileName = Dir()
Loop
最初に見つかったファイルを「今のところの最新」として覚えておき、
それ以降のファイルと更新日時を比較して、より新しければ取り替える、という流れです。
④ シートに結果を表示して、あとで確認できるようにする
ws.Range("B4").Value = latestFile
ws.Range("B5").Value = latestDate
マクロを実行したあとに、
「どのファイルが最新として判定されたか?」を把握しやすいように、
ファイル名と更新日時をシートに書き戻しているのがポイントです。
マクロ実行手順
- 「設定」シートを作成し、B2にフォルダパス、B3に拡張子(例:
xlsx)を入力する - Alt + F11 キーでVBE(VBAエディタ)を開く
- 「挿入」→「標準モジュール」をクリックする
- 表示されたコード画面に、先ほどの
OpenLatestFileInFolderマクロを貼り付ける - ブックを「マクロ有効ブック(.xlsm)」として保存する
- Excelに戻り、「開発」タブ →「マクロ」→
OpenLatestFileInFolderを選択して「実行」
実行すると、指定したフォルダ内から
更新日時が一番新しいファイルだけが自動で開きます。
応用編:さらに便利にするアレンジ
① ファイル名にキーワードを含むものだけから最新を探す
例えば、「売上」という文字を含むファイルだけから最新を探したい場合は、Dir のパターンを *売上* に変えてあげればOKです。
Dim keyword As String
keyword = "売上"
fileName = Dir(folderPath & "\" & "*" & keyword & "*." & fileExt)
同じフォルダにいろいろな種類のファイルが混在していても、
特定の種類だけに絞って最新ファイルを開けるようになります。
② 最新ファイルを開かず、「パスだけ取得」したい場合
マクロ内の最後の部分で、Workbooks.Open を使わずに
「セルにパスを書き出すだけ」にすることもできます。
Dim fullPath As String
fullPath = folderPath & "\" & latestFile
ws.Range("B4").Value = latestFile
ws.Range("B5").Value = latestDate
ws.Range("B6").Value = fullPath ' フルパス
' Workbooks.Open fullPath ← 開きたくない場合はコメントアウト
別のマクロからこのパスを参照して処理したいときなどに便利です。
注意点:ネットワークフォルダ・共有フォルダで使う場合
- ネットワークドライブ(
\\server\share\...)でも基本的には同じように動作します。 - ただし、アクセス権限がないフォルダではエラーになる場合があります。
- 大量のファイルがあるフォルダで実行すると、更新日時のチェックに少し時間がかかることがあります。
最初は、試しにテスト用のフォルダを作って、
数ファイルで動作確認してから本番フォルダで使うのがおすすめです。
まとめ:最新ファイル探しはVBAにお任せ
今回は、ExcelVBAでフォルダ内の最新ファイルだけを自動で開くマクロをご紹介しました。
- 「Dir関数」でフォルダ内のファイルを順番に取得
- 「FileDateTime」で更新日時を調べて、一番新しいファイルを判定
- 判定結果をシートに表示しつつ、Workbooks.Open で自動オープン
日次・月次レポート、バックアップファイル、出力帳票など、
「とりあえず一番新しいファイルを開きたい!」という場面は意外と多いはずです。
ぜひこのマクロを組み込んで、日々の作業を少しラクにしてみてください。
「サブフォルダも含めて最新を探したい」「特定の日付以降だけを対象にしたい」など、
さらに細かい条件で絞り込みたい場合は、コメント欄などで教えていただければ、
応用編の記事も検討していきたいと思います。


コメント