忍者ブログ
VBAによる実用アプリケーションの構築、およびGAS(Google Apps Script)やOffice Scriptへのモダンな移行パスを検証・解説するテックブログ。現場で即戦力となるコードモジュールや再利用可能な実用部品を継続的に提供します。

【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

2. イミディエイトウィンドウの実行結果

実際に C:\temp\test.txt を用意して Test_GetFileTimestamp を実行したところ、次のように正確な更新日時が取得できました。

=== [テスト] ファイルタイムスタンプ取得 ===
対象パス: C:\temp\test.txt
結果: 成功
ファイルのタイムスタンプ: 2026/10/04 06:28:33

3. このコードのポイントと注意点

  • FileDateTime関数の手軽さ:オブジェクトの生成(CreateObject)が不要なため、VBAの標準機能だけで非常にスッキリ記述できます。
  • 必ず存在チェックを入れること:FileDateTime は、指定したファイルが存在しない場合に実行時エラー(強制終了)になります。そのため、事前に Dir 関数で存在確認を行うか、エラーハンドラを用意するのが実務では必須です。
  • ローカルパスが必須:OneDriveのWebURL(https://...)などのクラウドパスは直接指定できません。必ず C:\... のようなローカルの物理パスに落とし込んで使用してください。

「古いログファイルを自動で掃除したい」「特定のデータファイルが新しく更新されているかチェックしたい」といった場面で非常に役立ちますので、ぜひ活用してみてください!



PR