Excel 需要基于值(VBA)删除行的代码

Excel 需要基于值(VBA)删除行的代码,excel,vba,macos,Excel,Vba,Macos,我要做的是让这段代码根据B列中的日期删除行。如果B列中的日期在过去3天内,它应该被删除。代码似乎删除了1或2行,但不是所有日期为“坏”的行 我已尝试将所有列的格式设置为“常规”。格式很好,所以这不是问题所在。我把日期转换成数字,这样我就可以得到最后3天的时间,而不会出错。应该知道,此数据以.csv文件开始,并在代码前面保存为excel文件 Dim myrow As Long Dim mydate As Long mydate = Int(CDbl(Now())) mydate = mydate

我要做的是让这段代码根据B列中的日期删除行。如果B列中的日期在过去3天内,它应该被删除。代码似乎删除了1或2行,但不是所有日期为“坏”的行

我已尝试将所有列的格式设置为“常规”。格式很好,所以这不是问题所在。我把日期转换成数字,这样我就可以得到最后3天的时间,而不会出错。应该知道,此数据以.csv文件开始,并在代码前面保存为excel文件

Dim myrow As Long
Dim mydate As Long

mydate = Int(CDbl(Now()))
mydate = mydate - 3

Columns("B:B").NumberFormat = "0"

Application.CutCopyMode = False

MsgBox "Last row with data:" & Cells(Rows.Count, "B").End(xlUp).row

For myrow = 1 To Cells(Rows.Count, "B").End(xlUp).row Step 1

        If Range("B" & myrow).value = mydate + 1 Or Range("B" & myrow).value = mydate + 2 Or Range("B" & myrow).value = mydate + 3 Then
        Range("B" & myrow).EntireRow.Delete
        End If

Next myrow
我希望此代码删除包含B列中最后3天中任何一天的所有行。B列是格式为“43588”“43599”等的一组日期。但是,当代码运行时,它仅删除1或2行。我有一个消息框,告诉最后一行数据,它显示了正确的值,意思是“Cells(Rows.Count,“B”)。End(xlUp)。row”工作正常


非常感谢您的帮助。

删除循环中的行时,必须按相反顺序(从下到上)遍历这些行。否则,当删除行时,它下面的行将重新编号,并且可能会被跳过

For myrow = Cells(Rows.Count, "B").End(xlUp).row to 1 Step -1

B列中有空白单元格吗?B列中没有空白单元格