フォルダ内、更新日時の一番古いファイルを取得したい
バックアップ用の世代管理での古いファイルの削除や、
ユーザーが操作したファイルで最も古いファイルを取得したい場合があります。
FileSystemObjectでも取得は可能ですが、FileDateTime関数で紹介します。
フォルダ内、更新日時の一番古いファイルを取得するサンプルコード
’■指定フォルダ内で一番古いファイルを取得する
Public Function Call_GetOldestFile(sPath As String, sExtension As String) As String
Dim chkTime As Date
Dim maxTime As Date
Dim chkName As String
Dim maxName As String
sPath = Call_TruePath(sPath) '★
chkName = Dir(sPath & sExtension)
maxTime = FileDateTime(sPath & chkName)
maxName = chkName
Do While chkName <> ""
chkTime = FileDateTime(sPath & chkName)
'■時間を比較し、既存より古ければ、ファイル名、ファイル更新時間を上書き
If chkTime < maxTime Then
maxTime = chkTime
maxName = chkName
End If
chkName = Dir()
Loop
'Call_GetOldestFile = maxName 'ファイル名の場合
Call_GetOldestFile = sPath & maxName 'フルパス(パス&ファイル名)の場合
End Function
使い方
実際の使い方は以下です。
Public Sub sample()
Dim sPath As String: sPath = "C:\vba"
Dim sFile As String
sFile = Call_GetOldestFile(sPath, "*") '全ての拡張子から一番古いファイルを取得
sFile = Call_GetOldestFile(sPath, "*.xls*") '.xlsを含むファイルから一番古いファイルを取得(.xls/.xlsx/.xlsm)
End Sub
注意点
- 上記コードのみでは動きません。下記のパーツ化された処理も追加してください。
※コメント★部分の処理は別処理で動きます。
・指定パスの末尾に円マーク(\)付与する



コメント