【Excel VBA】FileSystemObjectを使いこなす!(実践編) 第二回目 フォルダ内の最新ファイルを取得する

VBAでの操作

こんにちは、blueです。

前回は実践編の一回目としてフォルダ内のファイル名を一括変更する方法について説明しました。

前回の記事はこちら

今回はフォルダ内の最新ファイル取得する方法を紹介します。

スポンサーリンク

今回のコード

以下のようにフォルダ内でファイルが日々追加されていく状況で最新のファイルを取得します

コード

実際のコードは以下になります。

Private Sub GetLatestFile1()

    'フォルダを選択する(FileDialog)
    'フォルダオブジェクトを取得する(GetFolder)
    '最新日を仮置きする
    'フォルダ内のファイルに対して更新日を確認する。もし更新日が最新日より後ならそのファイル名を取得する
    'フォルダ名+ファイル名でファイルを開く
    
    Dim FD As FileDialog
    Dim FolderName As String
    Dim FSO As Scripting.FileSystemObject
    Dim objFolder As Scripting.Folder
    Dim objFile As Scripting.File
    Dim LatestFile As Scripting.File
    Dim LatestDate As Date
    
    '
    'フォルダを選択する(FileDialog)
    Set FD = Application.FileDialog(msoFileDialogFolderPicker)
    
    'フォルダオブジェクトを取得する(GetFolder)
    If FD.Show = True Then
        FolderName = FD.SelectedItems(1)
        Set FSO = New Scripting.FileSystemObject
        Set objFolder = FSO.getFolder(FolderName)
    Else
        Exit Sub
    End If
    
    '最新日を仮置きする
    LatestDate = "1900/1/1"
    
 'フォルダ内のファイルに対して更新日を確認する。もし更新日が最新日より後ならそのファイルオブジェクトを取得する
    For Each objFile In objFolder.Files
        If LatestDate < objFile.DateLastModified Then
            Set LatestFile = objFile
            LatestDate = LatestFile.DateLastModified
        End If
    Next objFile
    
    'Workbooks.Openでファイルを開く
    Workbooks.Open LatestFile.Path
    
    Set FSO = Nothing
    
End Sub

コードの詳細は以降で詳しく説明します。

コードの説明

オブジェクトの宣言

    Dim FD As FileDialog
    Dim FolderName As String
    Dim FSO As Scripting.FileSystemObject
    Dim objFolder As Scripting.Folder
    Dim objFile As Scripting.File
    Dim LatestFile As Scripting.File
    Dim LatestDate As Date

今回必要なオブジェクトはFileDialogとFSO,ファイルオブジェクトとフォルダオブジェクトです

また最新のファイルオブジェクトをLatestFile、最新日をLatestDateとして宣言しています。

フォルダ名の取得とオブジェクトの取得

     'フォルダを選択する(FileDialog)
    Set FD = Application.FileDialog(msoFileDialogFolderPicker)
    
    'フォルダオブジェクトを取得する(GetFolder)
    If FD.Show = True Then
        FolderName = FD.SelectedItems(1)
        Set FSO = New Scripting.FileSystemObject
        Set objFolder = FSO.getFolder(FolderName)
    Else
        Exit Sub
    End If

前回同様Application.FileDialog(msoFileDialogFolderPicker)で「フォルダを選択」ダイアログを立ち上げてフォルダ名を取得しています。

コードの詳しい説明はこちら

またFSOオブジェクトを取得したのちにフォルダオブジェクトを取得しています。

コードの詳しい説明はこちら

フォルダオブジェクト内の最新ファイルを取得し、ファイルを開く

    '最新日を仮置きする
    LatestDate = "1900/1/1"
    
 'フォルダ内のファイルに対して更新日を確認する。もし更新日が最新日より後ならそのファイルオブジェクトを取得する
    For Each objFile In objFolder.Files
        If LatestDate < objFile.DateLastModified Then
            Set LatestFile = objFile
            LatestDate = LatestFile.DateLastModified
        End If
    Next objFile

    'Workbooks.Openでファイルを開く
    Workbooks.Open LatestFile.Path

まず最初に最新日を仮置きします。

次にフォルダオブジェクト内の最新ファイルを取得する為にFor Eachステートメントを使用します。

前回同様Filesプロパティが有用でフォルダ内のすべてのファイルオブジェクトを取得しています。

コードの詳しい説明はこちら

その後For~Each Next内でファイルオブジェクト更新日を取得しています

その中でもし更新日が最新日よりも後であればそのファイルオブジェクトを取得し、最新日をそのファイルの更新日に変更しています。

最後にWorkbooks.Openでファイルを開いています。

まとめ

今回は 今回はフォルダ内の最新ファイル取得するコードを紹介しました。

この方法を応用すれば最新フォルダを取得することも可能です。

最新ファイルを手で探し出したりしないとならない場合などに使っていただければ幸いです。

コメント

  1. 山中 より:

    いつもVBA学習の参考にさせていただいております。記事更新ありがとうございます。

    「FileSystemObjectを使いこなす!(実践編) 第二回目 フォルダ内の最新ファイルを取得する」について、参考プロシージャのFor Each objFile In objFld.Filesの変数objFldはobjFolderではないでしょうか?

    ご確認をよろしくお願いします!

    Twitterフォローさせていただいております。@ympccom2020
    よろしくお願いします。

    • blue より:

      すみません、コメント来ないので見方を忘れておりました(汗)。
      ありがとうございます!2点間違い修正しました。
      問題ないと思いますがご確認ください。
      フォローしていただいていてありがとうございます。定期的にアウトプットしていきますので
      またみていただければ幸いです!

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