我正在比较W栏和AA栏中的两个日期。 情况是如果列AA> W,那么应该打印Nok。 如果列AA <= W,那么它应该打印OK。
我的代码正常运行。但问题等于条件不满足。
例如,我在W和AA栏中有一个日期01.09.2017,根据公式它应该是OK,但它打印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
答案 0 :(得分:2)
您可以使用DateDiff
功能获取2个日期之间的差异。
当把&#34; d&#34;作为第一个参数,您要检查以天为单位的增量,因此如果两个日期相同,只是小时数不同,结果仍为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
答案 1 :(得分:1)
这样的事情应该为你做,你的问题,如评论状态,是你可能在你的日期传递时间,Format
功能将允许你删除它们,On Error Resume Next
的原因{ {1}}如果单元格值为空,则会出现错误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
答案 2 :(得分:0)
如果您的列W和AA包含的日期,则最简单的解决方法是通过获取日期/时间值的整数部分来删除这些时间。
所以你可以使用:
If Int(.Cells(i, 27).Value) <= Int(.Cells(i, 23).Value) Then
请注意,这将决定2017年6月28日上午10:00的日期/时间是否小于或等于同一天的早上7:00,这听起来就像你想要的那样做 - 但它确实提出了为什么时间在细胞中的问题,如果它们无论如何都会被忽略。