用VBA比较日期

用VBA比较日期,vba,excel,Vba,Excel,我正在比较W列和AA列中的两个日期。 如果列AA>W,则应打印Nok。 如果AA列类似的内容应该适合您,您的问题,如注释状态,是您可能在日期中传递时间,Format函数将允许您删除它们,错误恢复下一步时出现的原因是,如果单元格值为空,则会出现错误13-类型不匹配 Sub Compare1() Dim i As Long, lngLastRow As Long Dim ws As Worksheet Dim FirstDate As Date, SecondDate As

我正在比较W列和AA列中的两个日期。 如果列AA>W,则应打印Nok。
如果AA列类似的内容应该适合您,您的问题,如注释状态,是您可能在日期中传递时间,
Format
函数将允许您删除它们,错误恢复下一步时出现
的原因是,如果单元格值为空,则会出现错误
13-类型不匹配

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

类似这样的事情应该可以帮到你,你的问题,如注释状态,是你可能在日期中传递时间,
格式
函数将允许你删除它们,错误恢复下一步的原因是,如果单元格值为空,将给出错误
13-类型不匹配

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

如果您的W列和AA列包含日期和时间,最简单的修复方法是通过获取日期/时间值的整数部分来删除这些时间

因此,您可以使用:

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

If Int(.Cells(i,27).Value)如果W列和AA列包含日期和时间,最简单的修复方法是通过获取日期/时间值的整数部分删除这些时间

因此,您可以使用:

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

If Int(.Cells(i,27).Value)您可以使用
DateDiff
函数获取两个日期之间的差值

当将“d”作为第一个参数时,您将检查以天为单位的增量,因此如果两个日期相同,只是时间不同,结果仍然是
0

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

代码

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()
我想我会坚持多久
暗淡的玻璃和长的一样
将ws设置为工作表
暗淡无光的三角洲
设置ws=Sheets(“BW”)
与ws
对于i=2到591
如果.Cells(i,27).Value=”“,则
.单元格(i,28).Value=“不适用”
其他的
DeltaDays=DateDiff(“d”,.Cells(i,27).Value,.Cells(i,23).Value)

如果DeltaDays您可以使用
DateDiff
函数获取两个日期之间的差值

当将“d”作为第一个参数时,您将检查以天为单位的增量,因此如果两个日期相同,只是时间不同,结果仍然是
0

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

代码

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()
我想我会坚持多久
暗淡的玻璃和长的一样
将ws设置为工作表
暗淡无光的三角洲
设置ws=Sheets(“BW”)
与ws
对于i=2到591
如果.Cells(i,27).Value=”“,则
.单元格(i,28).Value=“不适用”
其他的
DeltaDays=DateDiff(“d”,.Cells(i,27).Value,.Cells(i,23).Value)

如果是DeltaDays,我更喜欢将日期与
DateDiff
函数进行比较。如果您的两个日期包含小时和分钟,则可能会导致您的问题。你需要格式化它们,如果它们包含小时和分钟,你需要拆分它们,你可以去掉小时和分钟。@lonut如何去掉小时和分钟如果你想忽略日期字段的时间部分,只需使用
Int
-即
如果Int(.Cells(i,27).Value)@YowE3K是,这是我之前发表的CDATE文章的补充。我更喜欢使用
DateDiff
函数比较日期。如果您的两个日期包含小时和分钟,则可能会导致您的问题。你需要格式化它们,如果它们包含小时和分钟,你需要拆分它们,你可以去掉小时和分钟。@lonut如何去掉小时和分钟如果你想忽略日期字段的时间部分,只需使用
Int
-即
如果Int(.Cells(i,27).Value)@YowE3K是,这是我之前发表的CDATE文章之外的内容。因为它们来自数据库,不能忽略。@Mikz如果数据来自数据库,并且数据库的设计者认为字段包含特定时间很重要,那么将上午10:00视为早于上午7:00可能是错误的,因此,您当前的代码可能工作正常。目前工作正常。datediff和IntDiff这两个概念都很好,因为它们来自数据库,不能忽略。@Mikz如果数据来自数据库,并且数据库的设计者认为字段包含特定时间很重要,那么将上午10:00视为早于上午7:00可能是错误的,因此,您当前的代码可能工作正常。目前工作正常。这两个想法都很好,使用datediff和INT