No.2です。
補足の
>データが一行目からある場合はどこを変更すればよろしいのでしょうか?
について・・・
前回のコードはループさせずにフィルタを使って該当データが複数ある場合は
その行を一気に削除しています。
フィルタを掛けるためには「項目行」的な行が1行必要ですので、
データが1行目からある場合は「項目行」用として1行目を挿入してみました。
(若干の説明もコード内に載せておきます。★印の部分が変更または追加した部分です)
Sub 行削除2()
Dim i As Long, lastRow As Long, wS As Worksheet
Set wS = Worksheets("まとめ")
Application.ScreenUpdating = False
With Worksheets("値下げ")
'▼「値下げ」Sheetの1行目を挿入
.Rows(1).Insert '←フィルタを掛けるための項目行代わり★
.Range("A1") = "ダミー" '←不要かも・・・★
'▼「値下げ」SheetのB列最終行を取得
lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
'▼「まとめ」Sheetの1行目~A列最終行まで
For i = 1 To wS.Cells(Rows.Count, "A").End(xlUp).Row '←「2」を「1」に変更★
'▼「値下げ」SheetのB列でフィルタを掛ける(抽出条件は「まとめ」SheetのA列 i 行目)
.Rows(1).AutoFilter field:=2, Criteria1:=wS.Cells(i, "A")
'▼「まとめ」Sheetの表示されている行が2行目以降にあれば・・・
If .Cells(Rows.Count, "B").End(xlUp).Row > 1 Then
'▼A2~A列最終行までの表示されている行を削除し、上詰め
Range(.Cells(2, "A"), .Cells(lastRow, "A")).EntireRow.SpecialCells(xlCellTypeVisible).Delete shift:=xlUp
End If
'▼「まとめ」Sheetの次の行へ
Next i
'▼オートフィルタモードを解除
.AutoFilterMode = False
'▼挿入した行を削除
.Rows(1).Delete '★
End With
Application.ScreenUpdating = True
End Sub
※ 今回は両Sheetとも1行目からデータがあるという前提です。m(_ _)m
お礼
物凄く勉強になります!! ありがとうございました!!