VBATips

フォルダ内、更新日時の一番古いファイルを取得する【FileDateTime】【ExcelVBA】

フォルダ内、更新日時の一番古いファイルを取得したい

バックアップ用の世代管理での古いファイルの削除や、
ユーザーが操作したファイルで最も古いファイルを取得したい場合があります。
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

注意点

関連記事

コメント

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