誕生日にもらった意外なもの

いつもお世話になっております
B列に日付があり
今日の日付が過ぎたらその行を削除したい
下記のコードは作成したものの
何回も実行しないときえないです。
全部きえません。
わかる方おしえてくれませんでしょうか

B列の日付が 例)23年03月15日となっているため
DateSerial(Year(.Cells(i, "B")), Month(.Cells(i, "B")), Day(.Cells(i, "Q")))
しています。
間違えかもしれません。


Sub sdelete()
Dim wS As Worksheet
Dim i As Long

For Each wS In Worksheets
With wS
For i = 5 To .Cells(.Rows.Count, "B").End(xlUp).Row

If .Cells(i, "B").Value <> "" Then
If IsDate(.Cells(i, "B").Value) = True Then

If Date > DateSerial(Year(.Cells(i, "B")), Month(.Cells(i, "B")), Day(.Cells(i, "Q"))) Then
.Range(.Cells(i, "B"), .Cells(i, "H")).Delete

End If
End If
End If
Next
End With
Next

End Sub

A 回答 (1件)

そりゃソーでしょ。


だってね、行を削除したら、その下の全部の行が上へ移動する訳でしょ?
削除した行へ上移動した行は、もう処理対象外になりますからね。

例えば、i=10がヒットして10行目を削除したら、削除前の11行目が10行目に移動するわけ。

で、その次はiがカウントアップしてi=11になる。

10行目に移動した行はもう処理されないでしょ?

削除したら、iを1個戻す。i=i-1にして置いて、再度、前のi値で実行する。
    • good
    • 0
この回答へのお礼

ありがとうございます
わかりました。
For i = .Cells(.Rows.Count, "B").End(xlUp).Row To 3 Step -1
ですね

お礼日時:2023/04/01 20:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A