質問: Dir() Loop End Sub ```
回答: やりたいことは、 先週の月曜日~今週の月曜日の8日間の日付がExcelファイル内に抜けなく存在するかどうかのチェックですね。 ロジックの一例 ``` 1日付を格納する配列を用意して、8日分の日付を格納する。 別途、その日付が存在するかどうかを格納する配列も用意する。 2Dir関数で該当ファイルをループで取得して開く。 3 For Nextループで日付を検索する。 日付存在配列をチェックしてその日付が存在しなければ シートのログデータをFindで検索。 見つかれば、日付存在配列にTrueを代入 4ループで日付存在配列をチェックする。 日付が存在しない場合、その日付を文字列に連結していく。 5文字列が "" なら「すべてありました」とメッセージ ""でなければ、文字列 & 「がありませんでした」とメッセージ ``` 上記をコード化すると、 ``` '1 Dim LogDate(0 To 7) As Date Dim LogDateExist(0 To 7) As Boolean LogDate(0) = #4/1/2019# For i = 1 To 7 LogDate(i) = LogDate(0) + i Next '2 Dim i As Long filename = Dir(folderPath & "\*.xls") Do Until filename <> "" With Workbooks.Open(folderPath & "\" & filename).Sheets(1) '3 For i = 0 To 7 If Not LogDateExist(i) Then Set findRng = .Range("A1:A" & LastRow).Find(LogDate(i), LookAt:=xlPart) If Not findRng Is Nothing Then LogDateExist(i) = True End If End If Next End With filename = Dir() Loop '4 Dim NoDates As String For i = 0 To 7 If Not LogDateExist(i) Then NoDates = NoDates & "," & Format(LogDate(i), "m/d(aaa)") End If Next '5 If NoDates = "" Then MsgBox "すべてありました。" Else MsgBox Mid(NoDates, 2) & "がありませんでした。" End If ``` 変数宣言など細かい部分は省略しているの実際は動作しません。 ロジックの参考にしてください。 高速化 アクセスログということなので、データは日付/時刻の昇順になってますよね。 ならば、Findの代わりにMatch関数を使うと高速化できます。 速度に不満がある場合は変更してください。 提示のコードで気になる点 `Dim folderPath,filename As String` これは、folderPath, filename をString型で宣言したつもりでしょうが、 folderPath は型宣言を省略したことになり Variant型になります。 面倒でも、 `Dim folderPath As String, filename As String` と一つずつ宣言してください。 他の変数宣言も同様です。