EXCEL VBA:比较日和时间一个月只从所有日期开始

时间:2014-09-08 21:42:36

标签: excel vba date excel-vba

我试图仅比较以下时间间隔的一天:

表格(&#34; DATA&#34;)。范​​围(&#34; H:H&#34;)。NumberFormat =&#34; mm / dd / yyyy hh:mm am / pm&#34; < / p>

我发现自己是这个IF函数的解决方案,包含在许多其他IF的

If Sheets("Data").Range("i" & i).Value <> "N/A" And Sheets("Data").Range("K" & i).Value <> "N/A" Then
    If Day(Sheets("Data").Range("i" & i)) = Day(Sheets("DATA").Range("K" & i)) Then
        Sheets("Data").Range("S" & i).Value = "Equals"
    ElseIf Day(Sheets("Data").Range("i" & i)) > Day(Sheets("DATA").Range("K" & i)) Then
        Sheets("Data").Range("S" & i).Value = "Later"
    Else: Sheets("Data").Range("S" & i).Value = "Earlier"
    End If
    Else: Sheets("Data").Range("S" & i).Value = "N/A"
End If

这似乎可以解决问题 - 仅比较所有日期间隔的日期,并在S列中写入是同一天,更晚或更早,或者&#34;不可用&#34;。

但是,如果一个或另一个日期在另一个月内(因为2012 - 2013年的数据量超过50万行),这并不起作用。

如何比较此格式的年/月/日期&#34; mm / dd / yyyy hh:mm am / pm&#34;没有 - 从原始行删除小时和分钟(创建没有小时/分钟的新行也不是一个选项)

谢谢!

1 个答案:

答案 0 :(得分:3)

使用Value2属性比较单元格的值。 Value2属性返回单元格的未格式化值。存储的日期/时间值的每个整数代表一天,因此我使用Int()方法截断存储的值,因此我们只按日期进行比较,而不是按分钟或秒进行比较。

If Sheets("Data").Range("i" & i).Value <> "N/A" _
        And Sheets("Data").Range("K" & i).Value <> "N/A" Then

    Select Case Int(Sheets("Data").Range("i" & i).Value2)
        Case Is = Int(Sheets("DATA").Range("K" & i).Value2)
            Sheets("Data").Range("S" & i).Value = "Equals"
        Case Is > Int(Sheets("DATA").Range("K" & i).Value2)
            Sheets("Data").Range("S" & i).Value = "Later"
        Case Else
            Sheets("Data").Range("S" & i).Value = "Earlier"
    End Select

Else
    Sheets("Data").Range("S" & i).Value = "N/A"
End If