【问题标题】:Excel Date/Time Lookup ErrorExcel 日期/时间查找错误
【发布时间】:2018-03-14 04:18:03
【问题描述】:

我有两列 15 分钟的日期/时间间隔数据。一个格式为 24 小时制,另一个格式为 12 小时制。这些来自两个不同的来源,重新格式化源数据不是一种选择。所有这些间隔都显示为完全匹配(甚至作为值),但是当我使用查找公式(INDEX/MATCH & VLOOKUP)甚至 VBA 时,没有识别出每三个间隔的匹配项。我在下面附上了带有公式的示例图片以及我的代码。提前致谢!

Sub MatchTest()
   Dim i As Integer
   For i = 2 To 22
If CDate(Cells(i, 1).Value) = CDate(Cells(i, 3).Value) Then
    Cells(i, 8) = Cells(i, 2)
    ActiveCell.Offset(1, 0).Select        
Else:   
    Cells(i, 8) = "NA"
    ActiveCell.Offset(1, 0).Select      
End If  
Next i
End Sub

【问题讨论】:

  • 尝试使用If Abs(Cells(i, 1).Value - Cells(i, 3).Value) < 0.0000001 Then。我怀疑其中一个数字已经四舍五入了。 (非整数值的行为并不异常。)
  • 如果没有源文件,我无法重新创建问题,我敢打赌它们包括毫秒?我怀疑@YowE3K 是正确的。也许这将是使用.value2 而不是.value 作为CDate() 函数的时代之一
  • @YowE3K 和约书亚芬纳。你们都完全正确。我从来没有考虑过有意义的毫秒,因为这些是功率输出的间隔读取。 "

标签: excel vba date time format


【解决方案1】:

可以使用 Timevalue 和 Datevalue 来代替 Cdate。 TIMEVALUE 函数返回时间的序列号。 DATEVALUE 函数将存储为文本的日期转换为 Excel 识别为日期的序列号。

例如,时间值 08/12/2008 20:00:00 和 08/12/2008 08:00PM 产生相同的结果 0.833333333335759

同一日期的不同格式的日期值也会产生相同的结果

TIMEVALUE(TEXT(yourdate, "DD/MM/YYYY HH:MM:SS"))
TIMEVALUE(TEXT(yourdate, "DD/MM/YYYY HH:MM AM/PM"))
DATEVALUE(TEXT(yourdate, "DD MMMM YYYY"))

【讨论】:

    【解决方案2】:

    大家好,感谢您的回答。这三种方法都有效。

     If TimeValue(Cells(i, 1).Value) = TimeValue(Cells(i, 3).Value) Then
     If DateValue(Cells(i, 1).Value) = DateValue(Cells(i, 3).Value) Then
     If Abs(CDate(Cells(i, 1).Value) - CDate(Cells(i, 3).Value)) < 0.000001 Then
    

    【讨论】:

    • 最后一个方法应该包含Abs函数——即If Abs(CDate(Cells(i, 1).Value) - CDate(Cells(i, 3).Value)) &lt; 0.000001 Then
    猜你喜欢
    • 1970-01-01
    • 2015-04-26
    • 2016-06-14
    • 2015-06-17
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2019-06-23
    相关资源
    最近更新 更多