VBA FileDateTime 関数で共有ファイルの「最新版」を確実に特定!ファイル更新日時取得の完全ガイド
「共有サーバーにあるあのファイル、本当に今日更新された最新版なの?」
Excel VBAを使って業務を効率化している皆さんなら、一度はこんな悩みに直面したことがあるのではないでしょうか。手作業での確認は手間がかかる上に、誤った古いファイルを使ってしまうリスクも。そんな文書管理のモヤモヤを解消する強力なVBA関数が、今回ご紹介する FileDateTime です。この関数をマスターすれば、共有ファイルの更新日時を瞬時に取得し、常に最新の情報を扱うことが可能になります。さあ、一緒にVBAによるスマートなファイル管理の世界へ踏み出しましょう。
【コピペで即解決!】FileDateTime 関数の基本コード
まずは、FileDateTime 関数の基本的な使い方を見てみましょう。以下のコードをVBAエディタに貼り付け、実行するだけで、指定したファイルの更新日時を取得できます。
Sub GetFileUpdateDate_Basic()
Dim filePath As String
Dim lastModified As Date
' ★調べたいファイルのパスを指定してください。
' 例: "C:\SharedFolder\Master.xlsx"
' この例ではマクロファイルと同じフォルダのMaster.xlsxを想定しています。
filePath = ThisWorkbook.Path & "\Master.xlsx"
On Error GoTo ErrorHandler ' エラー発生時にErrorHandlerへジャンプ
' FileDateTime関数でファイル更新日時を取得
lastModified = FileDateTime(filePath)
' 結果を表示
MsgBox "ファイル名: " & filePath & vbCrLf & _
"最終更新日時: " & Format(lastModified, "yyyy/mm/dd hh:mm:ss"), _
vbInformation, "ファイル更新日時取得"
Exit Sub ' エラーがなければここで終了
ErrorHandler:
' エラーメッセージを表示
MsgBox "エラーが発生しました: " & Err.Description & vbCrLf & _
"ファイルパス: " & filePath & vbCrLf & _
"ファイルが存在しないか、アクセス権がない可能性があります。", _
vbCritical, "エラー"
End Sub
コードのポイント:
filePath = ThisWorkbook.Path & "\Master.xlsx": ここで対象ファイルのパスを指定します。テストする際は、ご自身の環境に合わせてファイルを準備するか、既存のファイルパスに変更してください。FileDateTime(filePath): この一行で、指定されたファイルの最終更新日時が返されます。On Error GoTo ErrorHandler: ファイルが存在しない場合などに発生するエラーを捕捉し、コードが強制終了するのを防ぎます。
知っておくべき2つの落とし穴と確実な回避策
FileDateTime 関数は非常に便利ですが、実務で使う際にはいくつか注意すべき点があります。これを理解し、適切に対処することで、より堅牢で信頼性の高いVBAコードを作成できます。
落とし穴1: ファイルが存在しないとエラーになる
上記の基本コードでもOn Error GoToで簡易的なエラー処理を行いましたが、ファイルが存在しない場合に備えて、事前にチェックする方がスマートです。VBAではDir関数を使ってファイルの存在を確認できます。
Sub GetFileUpdateDate_Robust()
Dim filePath As String
Dim lastModified As Date
Dim fileNameCheck As String
filePath = ThisWorkbook.Path & "\Master.xlsx" ' 例: "C:\SharedFolder\Master.xlsx"
' Dir関数でファイルの存在をチェック
' Dir関数はファイルが存在すればそのファイル名を返し、存在しなければ空文字列を返します。
fileNameCheck = Dir(filePath)
If fileNameCheck = "" Then
' ファイルが存在しない場合
MsgBox "指定されたファイルが見つかりません。" & vbCrLf & _
"パス: " & filePath, vbExclamation, "ファイルエラー"
Else
' ファイルが存在する場合のみ処理を実行
lastModified = FileDateTime(filePath)
MsgBox "ファイル名: " & filePath & vbCrLf & _
"最終更新日時: " & Format(lastModified, "yyyy/mm/dd hh:mm:ss"), _
vbInformation, "ファイル更新日時取得"
End If
End Sub
落とし穴2: 取得できるのは「更新日」であり「作成日」ではない
FileDateTime 関数が返すのは、そのファイルが最後に更新された日時です。ファイルを「作成」した日時ではありません。共有サーバーでよくある「上書き保存」の場合、作成日は変わらず更新日のみが変わります。もし「作成日」が必要な場合は、FileSystemObject (FSO) を使う必要があります。
【重要】FileDateTimeは「最終更新日時」!
共有サーバー上のファイルが「いつ作られたか」ではなく、「最後にいつ変更されたか」を知りたい場合にFileDateTimeは最適です。「最新版かどうか」の判断基準としては「最終更新日時」が適切です。
もし「作成日時」が必要な場合は、Scripting.FileSystemObjectを使用した別の方法を検討してください。この関数では取得できません。
まとめ:FileDateTimeでスマートな文書管理を実現!
VBAの FileDateTime 関数は、共有サーバー上のファイルが最新版であるかを確認する際に非常に強力なツールとなります。ファイル更新日時を自動で取得し、手作業での確認の手間とリスクを大幅に削減できるでしょう。
今回ご紹介した「ファイルの存在チェック」や「更新日時と作成日時の違い」といった注意点を踏まえることで、より堅牢で実用的なVBAアプリケーションを構築できます。ぜひこの関数をあなたのVBAスキルに加えて、日々の業務効率化に役立ててください。