在IF语句中等待时间值

时间:2014-03-24 19:42:12

标签: excel vba excel-vba

早上好,

我遇到的问题是关于时间值的逻辑陈述没有按预期进行评估。

是否存在逻辑上等同重复小数的已知问题?

为清楚起见,这里是相关代码的示例。

Function compareTimes(timeCurrent, timeStart, timeEnd, timeBreak1, Optional timeLunch As Variant, Optional timeBreak2 As Variant)

    If timeCurrent >= timeStart And timeCurrent < timeEnd Then

        If timeCurrent = timeBreak1 Or timeCurrent = timeBreak2 Then
            compareTimes = "b"
        ElseIf IsMissing(timeLunch) = False Then
             timeLunchEnd = timeLunch + (1 / 48)

             If timeCurrent >= timeLunch And timeCurrent < timeLunchEnd Then
                 compareTimes = "L"
             Else
                 compareTimes = 1
             End If

        Else
             compareTimes = 1
        End If

    Else
        compareTime = 0
    End If

End Function

该函数的所有参数都是Excel时间,格式为h:mm。 错误的一个示例是第二个If语句 - 当timeCurrent和timeBreak1是Excel中的同一个单元格时,该函数按预期输出“b”。 但是如果timeCurrent和timeBreak1在具有相同值的不同单元格中(例如12:00),则返回1。

非常感谢任何有关理解逻辑和浮点的帮助。

1 个答案:

答案 0 :(得分:0)

虽然您可能将时间显示为h:mm,但Excel实际上存储的全部值包括秒。如果将单元格格式更改为h:mm:ss,则值可能与假设的“相同”不同。时间存储为Date.Time,其中,小数点前的数字表示天数,小数点后的数字表示24小时工作日的小数部分(即0.5 =中午12:00)。尝试更改单元格的格式以显示日期和时间,以确保整个“日期值”与您的期望一致。

时间变量应定义为double,以确保所考虑的数据类型没有问题。目前尚不清楚时间是如何进入的。