首页 文章

EXCEL VBA:仅比较所有日期的日期和月份

提问于
浏览
0

我想比较以下间隔的一天:

表格(“DATA”) . 范围(“H:H”) . NumberFormat =“mm / dd / yyyy hh:mm am / pm”

我发现自己是这个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列中写入是同一天,更晚或更早,或“不可用” .

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

我怎样才能比较这种格式“mm / dd / yyyy hh:mm am / pm”的年/月/日期 - 删除原始行的小时和分钟(创建没有小时/分钟的新行也不是一个选项)

谢谢!

1 回答

  • 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
    

相关问题