【VBAリファレンス|実務向け】実務で差がつく!VBAでファイル日時を「正しく」取得する技術

スポンサーリンク

なぜプロは「FileDateTime関数」を使わないのか

Excel VBAでファイルの作成日時や更新日時を取得しようとすると、真っ先に「FileDateTime関数」が紹介されます。確かに手軽ですが、実務の現場では不十分なケースが多々あります。なぜなら、この関数は「ファイルの最終更新日時」しか取得できず、かつ「OSの仕様に依存しすぎて正確性に欠ける場合がある」からです。

プロの現場では、より詳細で確実な情報を取得するために「FileSystemObject(FSO)」を利用します。これを使うことで、作成日時、最終更新日時、さらには最終アクセス日時までを、オブジェクト指向のスマートな書き方で取得できるようになります。

FSOを使った実務直結のコード例

まずは、以下のコードを標準モジュールに貼り付けてみてください。

Sub GetFileDetail()
Dim fso As Object
Dim f As Object
Dim filePath As String

filePath = “C:\Users\Desktop\Sample.xlsx” ‘ 対象のファイルパス
Set fso = CreateObject(“Scripting.FileSystemObject”)

‘ ファイルが存在するか確認(エラー回避の鉄則)
If fso.FileExists(filePath) Then
Set f = fso.GetFile(filePath)

Debug.Print “作成日時: ” & f.DateCreated
Debug.Print “最終更新日時: ” & f.DateLastModified
Debug.Print “最終アクセス日時: ” & f.DateLastAccessed
Else
MsgBox “ファイルが見つかりません”
End If

Set f = Nothing
Set fso = Nothing
End Sub

実務で活用するための「注意点」

コードを書くだけなら簡単ですが、実務でトラブルを防ぐために「3つの視点」を覚えておいてください。

まず一つ目は、「ネットワークドライブの扱い」です。サーバー上のファイルを扱う際、通信環境やサーバーのOS設定によっては、作成日時が「ファイルがサーバーにコピーされた日時」に書き換わることがあります。「作成日時=元のファイルが生まれた日」とは限らないという前提で仕様を組むのがベテランの作法です。

二つ目は、「日付フォーマット」です。f.DateCreatedの結果は日付型として返ってきますが、セルに出力する際は必ず「Format関数」を使って、表示形式を整えてください。セルにそのまま放り込むと、予期せぬ日付形式で表示され、後続の集計作業が狂う原因になります。

三つ目は、「処理の軽量化」です。大量のファイル(例えば1000個以上のログファイルなど)をループで処理する場合、毎回CreateObjectを呼び出すと動作が重くなります。ループの外で一度だけFSOを生成し、使い回すようにしましょう。

まとめ:道具を使い分ける判断力を

ファイルの日時情報を取得するスキルは、「古いファイルを自動削除するツール」や「更新順に並び替えてバックアップを取るマクロ」など、自動化の幅を大きく広げます。

単に「日時を表示する」だけでなく、その情報を元に「どのファイルを処理すべきか」という判断ロジックを組み込むことで、あなたのVBAスキルは一気に実務レベルへと引き上がります。ぜひ、次の業務効率化でこの手法を試してみてください。

タイトルとURLをコピーしました