こんにちは、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でファイルを開いています。
まとめ
今回は 今回はフォルダ内の最新ファイル取得するコードを紹介しました。
この方法を応用すれば最新フォルダを取得することも可能です。
最新ファイルを手で探し出したりしないとならない場合などに使っていただければ幸いです。
コメント
いつもVBA学習の参考にさせていただいております。記事更新ありがとうございます。
「FileSystemObjectを使いこなす!(実践編) 第二回目 フォルダ内の最新ファイルを取得する」について、参考プロシージャのFor Each objFile In objFld.Filesの変数objFldはobjFolderではないでしょうか?
ご確認をよろしくお願いします!
Twitterフォローさせていただいております。@ympccom2020
よろしくお願いします。
すみません、コメント来ないので見方を忘れておりました(汗)。
ありがとうございます!2点間違い修正しました。
問題ないと思いますがご確認ください。
フォローしていただいていてありがとうございます。定期的にアウトプットしていきますので
またみていただければ幸いです!