2017-06-21 36 views
0

我正在努力處理以下內容:我想刪除哪些日期(C列)比今天更早的行。我的代碼應工作(根據網絡),但它不能做,而且,它的超慢。這裏是它的一部分:今日日期前刪除行 -

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

而不是把「C」,我可以把3,但不會改變任何東西。我試圖添加End If(在下一個i之前),但顯然不是必需的。也許日期不是正確的格式..

這段代碼有什麼問題?

您的幫助十分感謝:)

+0

它在做什麼,它不應該? 「不工作」不夠明確。也可以嘗試向後循環:'For i = LastRow to 2 Step -1' –

+0

不工作意味着日期之前的行不會被刪除。 – Jeofbist3

回答

0

您將要刪除行的時候倒退,並驗證它實際上是在細胞中的日期。要查看它在做什麼,請在第一行設置一個斷點,並使用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 
+0

您也可能想將單元格轉換爲實際日期值... 'CVDate(Cells(i,「C」)。Value) braX

+0

感謝您的回答braX。我剛剛把你的代碼,它的作品。但計算速度非常慢(我有11000行,可能是爲什麼,但奇怪,因爲更大的文件更快,但其他公式(而不是如果))。我沒有放置轉換代碼,因爲格式是日期(右鍵單擊Excel)。轉換速度會更快嗎?我沒有得到在哪裏設置斷點:在文件或代碼中?感謝:) – Jeofbist3

+0

您可以在處理過程中禁用屏幕更新。 'Application.ScreenUpdating = False' 然後在完成後再打開它。 – braX

1

使用Excel的自動篩選功能對您有利。按照您的標準過濾範圍以刪除匹配的行:

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

感謝您的回答!工作真的很棒,速度快:) – Jeofbist3