我试图删除特定时间段之前的所有日期,以及数据集中不是日期的任何内容。A 列中大约有 4000 个条目,可追溯到过去 10 年,其中混杂着一些拼写错误。数据之间没有空白点。
我拼凑了下面的代码,几乎可以工作。然而,有一个条目31/12/1019没有被认为是旧日期或拼写错误。
Sub deleterows()
lastRow = Sheets("ConData").Cells(Rows.Count, 1).End(xlUp).Row
bankingDate = DateSerial(Year(Date), Month(Date), 0)
For i = lastRow To 1 Step -1
If IsDate(Cells(i, 1)) = False Or _
Cells(i, 1).Value <= bankingDate Then Rows(i).EntireRow.Delete
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激。
让我们分解一下,这是 Excel 和 VBA 之间的一个奇妙的不一致:
根据这篇文章:
在Windows中,有效日期的范围是公元100年1月1日到公元9999年12月31日;范围因操作系统而异。
所以 IsDate 将返回 TRUE31/12/1019
但
由于 Excel 实际上将“日期”存储为双精度型,因此1900-01-01日期1.00将作为字符串存储在工作表中,并且Cells(i, 1).Value <= bankingDate会返回False,因为字符串大于数字。
但正如@BigBen 所说:
在与 进行比较之前先转换为日期bankingDate。
If Not IsDate(Cells(i, 1).Value) Then
Rows(i).EntireRow.Delete
ElseIf CDate(Cells(i, 1).Value) <= bankingDate
Rows(i).EntireRow.Delete
End If
Run Code Online (Sandbox Code Playgroud)