【问题标题】:Removing rows when date prior today -在今天之前的日期删除行 -
【发布时间】:2017-11-24 10:18:55
【问题描述】:

我正在努力解决以下问题:我想删除日期(C 列)早于今天的行。我的代码应该可以工作(根据网络),但它没有,而且速度非常慢。这是其中的一部分:

For i = 2 To LastRow     
    If Cells(i, "C").Value < Date Then Rows(i).EntireRow.Delete    
Next i

我可以输入 3 而不是输入“C”,但不会改变任何内容。我尝试添加 End If (在下一个 i 之前),但显然没有必要。也许日期不是正确的格式..

这段代码有什么问题?

非常感谢您的帮助:)

【问题讨论】:

  • 它在做什么不该做什么? Not Working 描述性不够。还可以尝试向后循环:For i = LastRow to 2 Step -1
  • 不工作意味着日期早于今天的行没有被删除。

标签: vba loops date rows


【解决方案1】:

使用 Excel 的自动筛选功能对您有利。按您的条件过滤范围以删除匹配的行:

  With Range("C1:C" & lastrow)
    .AutoFilter 1, "<" & CLng(Date)
    .Offset(1).EntireRow.Delete
    .AutoFilter
  End With

【讨论】:

  • 感谢您的回答!效果非常好,速度很快:)
【解决方案2】:

在删除行时,您需要后退一步,并验证它实际上是单元格中的日期。要查看它在做什么,请在第一行设置断点并使用 F8 单步执行。还要验证 LastRow 的值是否设置为正确的值。

For i = LastRow To 2 Step -1
    If IsDate(Cells(i, "C").Value) then
        If Cells(i, "C").Value < Date Then Rows(i).EntireRow.Delete
    End If
Next i

【讨论】:

  • 您可能还想将单元格转换为实际的日期值...CVDate(Cells(i, "C").Value) &lt; Date
  • 感谢您的回答braX。我刚刚把你的代码和它的工作原理。但是在计算时它非常慢(我有 11 000 行,也许是为什么,但很奇怪,因为对于更大的文件但对于其他公式(不是如果)更快)。我没有放转换代码,因为格式是日期(右键单击 Excel)。转换会使其更快吗?我没有找到在哪里设置断点:在文件中还是在代码中?谢谢:)
  • 您可以在处理屏幕更新时禁用它。 Application.ScreenUpdating = False 完成后重新打开。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-27
  • 2020-06-30
  • 2022-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多