我试图只比较以下时间间隔的一天:
Sheets("DATA").Range("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”比较年/月/日而不删除原始行中的小时和分钟(创建没有小时/分钟的新行也不是一个选项)
谢谢!
最佳答案
使用 Value2
比较单元格的值属性(property)。 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
关于vba - EXCEL VBA : comparing day & month only from all the date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25733565/