前提・実現したいこと
VBA初心者です。
複数のシートの中から、条件に一致する(例えば、日付が2023/1/1以降のデータ)行を別のシートにまとめたいです。
色々なサイトを調べてコードを作成したのですが、どうしても上手くいかないため、質問をさせていただきました。
発生している問題
下記コードだと、F列(各シート開始日が入ってる列)の中に条件と一致するものがあれば、そのシートの全ての行が「まとめ」シートにコピーされてしまいます。
"If ws.Range("F" & lRow) >= Start_Day Then"
の入れる場所の問題かと、移動してみましたが、それでも結果は変わらず。
AutoFilterでも試して見たのですが、フィルターが上手くかかっていないシートがあったりと苦戦しております。
併せて、下記コードで動作が遅いことがあるので、軽くする方法があればそちらも教えていただきたいです。
よろしくお願いいたします。
該当のソースコード
Sub まとめテスト Dim data() As Variant Dim i As Long, j As Long, dRow As Long, lRow As Long Dim ws As Worksheet, ws01 As Worksheet Set ws01 = ThisWorkbook.Worksheets("まとめ") dRow = 2 Start_Day = ws01.Cells(1, 17) '開始日をまとめシート内のセルで都度指定 For Each ws In ThisWorkbook.Worksheets If InStr("/まとめ/sheet1/sheet2/sheet3/sheet4/sheet5/", "/" & ws.Name & "/") = 0 Then lRow = ws.Cells(ws.Rows.Count, "F").End(xlUp).Row If ws.Range("F" & lRow) >= Start_Day Then data = ws.Range("A2:M" & lRow).Value ws01.Range("A" & dRow).Resize(UBound(data, 1), UBound(data, 2)).Value = data dRow = dRow + lRow - 1 End If End If Next ws End Sud
補足情報
・まとめたいシートが増えたり減ったりするので、If InStr〜Thenで絞っています。
・A列は抽出したい行以上にデータが入っていることがあるので、F列で最終行を取得しています。
0 コメント