【Excel VBA】ローカルファイルの最終更新日時を取得する!FileSystemObjectより手軽なFileDateTimeの使い方
Excel VBAでマクロを自動化していると、「処理対象のファイルがいつ更新されたものか(タイムスタンプ)」を確認したくなる場面がよくあります。
VBAでファイルの最終更新日時を取得する方法としては FileSystemObject (FSO) を使う方法が有名ですが、実は組み込み関数の FileDateTime を使うと、よりシンプルで手軽に取得できます。
この記事では、FileDateTime 関数の基本的な使い方から、実務で必須となる「エラー対策」を施した関数、そして実際にローカルファイル(C:\temp)から取得した実行結果までをご紹介します。
1. 実装コード(関数 & テストコード)
安全にファイル存在チェックを行い、タイムスタンプを返す汎用関数と、動作確認用のテストプロシージャです。これを標準モジュールに貼り付けて使用します。
' [機能名] 指定されたファイルの最終更新日時(タイムスタンプ)を取得する
' [引数] filePath : 必須 : 対象ファイルのフルパス(ローカルパス)
' [戻り値] タイムスタンプ(Date型)または Empty(存在しない場合)
Public Function GetFileTimestamp(ByRef filePath As String) As Variant
' 事前存在チェック(Dir関数)
If Dir(filePath) = "" Then
GetFileTimestamp = Empty
Exit Function
End If
' タイムスタンプの取得(安全対策としてエラーハンドリング)
On Error GoTo ErrorHandler
GetFileTimestamp = FileDateTime(filePath)
Exit Function
ErrorHandler:
GetFileTimestamp = Empty
End Function
' [機能名] 動作テスト用プロシージャ
Public Sub Test_GetFileTimestamp()
Dim targetPath As String
targetPath = "C:\temp\test.txt"
Debug.Print "=== [テスト] ファイルタイムスタンプ取得 ==="
Debug.Print "対象パス: " & targetPath
Dim ts As Variant
ts = GetFileTimestamp(targetPath)
If IsEmpty(ts) Then
Debug.Print "結果: 指定されたファイルが見つからないか、取得できませんでした。"
Else
Debug.Print "結果: 成功"
Debug.Print "ファイルのタイムスタンプ: " & Format(ts, "yyyy/mm/dd hh:nn:ss")
End If
End Sub
' [引数] filePath : 必須 : 対象ファイルのフルパス(ローカルパス)
' [戻り値] タイムスタンプ(Date型)または Empty(存在しない場合)
Public Function GetFileTimestamp(ByRef filePath As String) As Variant
' 事前存在チェック(Dir関数)
If Dir(filePath) = "" Then
GetFileTimestamp = Empty
Exit Function
End If
' タイムスタンプの取得(安全対策としてエラーハンドリング)
On Error GoTo ErrorHandler
GetFileTimestamp = FileDateTime(filePath)
Exit Function
ErrorHandler:
GetFileTimestamp = Empty
End Function
' [機能名] 動作テスト用プロシージャ
Public Sub Test_GetFileTimestamp()
Dim targetPath As String
targetPath = "C:\temp\test.txt"
Debug.Print "=== [テスト] ファイルタイムスタンプ取得 ==="
Debug.Print "対象パス: " & targetPath
Dim ts As Variant
ts = GetFileTimestamp(targetPath)
If IsEmpty(ts) Then
Debug.Print "結果: 指定されたファイルが見つからないか、取得できませんでした。"
Else
Debug.Print "結果: 成功"
Debug.Print "ファイルのタイムスタンプ: " & Format(ts, "yyyy/mm/dd hh:nn:ss")
End If
End Sub
2. イミディエイトウィンドウの実行結果
実際に C:\temp\test.txt を用意して Test_GetFileTimestamp を実行したところ、次のように正確な更新日時が取得できました。
=== [テスト] ファイルタイムスタンプ取得 ===
対象パス: C:\temp\test.txt
結果: 成功
ファイルのタイムスタンプ: 2026/10/04 06:28:33
対象パス: C:\temp\test.txt
結果: 成功
ファイルのタイムスタンプ: 2026/10/04 06:28:33
3. このコードのポイントと注意点
- FileDateTime関数の手軽さ:オブジェクトの生成(
CreateObject)が不要なため、VBAの標準機能だけで非常にスッキリ記述できます。 - 必ず存在チェックを入れること:
FileDateTimeは、指定したファイルが存在しない場合に実行時エラー(強制終了)になります。そのため、事前にDir関数で存在確認を行うか、エラーハンドラを用意するのが実務では必須です。 - ローカルパスが必須:OneDriveのWebURL(
https://...)などのクラウドパスは直接指定できません。必ずC:\...のようなローカルの物理パスに落とし込んで使用してください。
「古いログファイルを自動で掃除したい」「特定のデータファイルが新しく更新されているかチェックしたい」といった場面で非常に役立ちますので、ぜひ活用してみてください!
PR