与VBA相比较的date

我正在比较W和AA两个date。 如果列AA> W,那么它应该打印Nok。 如果列AA <= W,那么它应该打印确定。

我有我的代码工作。 但问题是等于条件不满意。

例如我有一个date01.09.2017列W和AA,根据公式它应该是好的,但它打印NOK。

谁能告诉我,这个情况有什么问题。 我希望它能在VBA中完成。

Sub Compare1() Dim i As Long Dim lngLastRow As Long Dim ws As Worksheet Set ws = Sheets("BW") With ws For i = 2 To 591 If .Cells(i, 27).Value = "" Then .Cells(i, 28).Value = "N/A" Else If .Cells(i, 27).Value <= .Cells(i, 23).Value Then .Cells(i, 28).Value = "OK" .Cells(i, 28).Interior.Color = RGB(0, 255, 0) Else .Cells(i, 28).Value = "NOK" .Cells(i, 28).Interior.Color = RGB(255, 0, 0) End If End If Next i End With End Sub 

您可以使用DateDiff函数来获取两个date之间的增量。

当把“d”作为第一个参数时,你正在检查天数的增量,所以如果两个date相同,只是小时数不同,结果仍然是0

要了解有关DateDiff函数的更多信息,请转到MSDN

 Sub Compare1() Dim i As Long Dim lngLastRow As Long Dim ws As Worksheet Dim DeltaDays As Long Set ws = Sheets("BW") With ws For i = 2 To 591 If .Cells(i, 27).Value = "" Then .Cells(i, 28).Value = "N/A" Else DeltaDays = DateDiff("d", .Cells(i, 27).Value, .Cells(i, 23).Value) If DeltaDays <= 0 Then .Cells(i, 28).Value = "OK" .Cells(i, 28).Interior.Color = RGB(0, 255, 0) Else .Cells(i, 28).Value = "NOK" .Cells(i, 28).Interior.Color = RGB(255, 0, 0) End If End If Next i End With End Sub 

像这样的东西应该为你做,你的问题,如意见状态,是你可能在你的date时间, Formatfunction将允许您删除它们, On Error Resume Next的原因是,如果单元格的值为空白会给错误13 - Type Mismatch

 Sub Compare1() Dim i As Long, lngLastRow As Long Dim ws As Worksheet Dim FirstDate As Date, SecondDate As Date Set ws = Sheets("BW") With ws For i = 2 To 591 On Error Resume Next FirstDate = Format(.Cells(i, "AA").Value, "dd/mm/yyyy") SecondDate = Format(.Cells(i, "W").Value, "dd/mm/yyyy") On Error GoTo 0 If FirstDate = Empty Then .Cells(i, 28).Value = "N/A" Else If FirstDate <= SecondDate Then .Cells(i, "AB").Value = "OK" .Cells(i, "AB").Interior.Color = RGB(0, 255, 0) Else .Cells(i, "AB").Value = "NOK" .Cells(i, "AB").Interior.Color = RGB(255, 0, 0) End If End If Next i End With End Sub 

你也可以使用下面的If语句来代替,我个人觉得这是简单而干净的,但这是个人喜好

 Select Case FirstDate Case Is = "" .Cells(i, "AB").Value = "N/A" Case Is <= SecondDate .Cells(i, "AB").Value = "OK" .Cells(i, "AB").Interior.Color = RGB(0, 255, 0) Case Is > SecondDate .Cells(i, "AB").Value = "NOK" .Cells(i, "AB").Interior.Color = RGB(255, 0, 0) End Select 

如果您的列W和AA包含具有时间的date,则最简单的解决方法是通过获取date/时间值的整数部分来删除那些时间。

所以你可以使用:

 If Int(.Cells(i, 27).Value) <= Int(.Cells(i, 23).Value) Then 

请注意,这将决定2017年6月28日上午10:00的date/时间小于或等于同一天的上午7:00,这听起来像是你正在做的事情 – 但它确实提出了为什么时代在细胞中的问题,无论如何他们只是会被忽略。