2014-03-24 50 views
0

早上好,在IF語句中等於時間值

我有一個問題,即有關時間值的邏輯語句沒有按預期進行評估。

是否存在一個已知問題,從邏輯上等同於重複小數?

爲了清楚起見,這裏是一個有問題的代碼示例。

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 

函數的所有參數都是格式爲h:mm的Excel時間。 錯誤的一個示例是2nd If語句 - 當timeCurrent和timeBreak1在Excel中是同一個單元格時,函數按預期輸出「b」。 但是,如果timeCurrent和timeBreak1在具有相同值的不同單元格中(例如12:00),它將返回1。

任何幫助理解邏輯和浮點將不勝感激。

+0

放在'Debug.Print CDbl(timeCurrent); CDbl(timeBreak1)'就在比較之上。顯示號碼是否相同? –

回答

0

儘管您可能將時間顯示爲h:mm,但Excel實際上會存儲包含秒的完整值。如果將單元格格式更改爲h:mm:ss,則這些值可能與假定的值不同。時間存儲爲Date.Time,小數點前的數字表示天數,小數點後的數字表示24小時日的小數部分(即0.5 =中午12:00)。嘗試更改單元格的格式以顯示日期和時間,以確保整個「日期值」符合您的期望。

時間變量應定義爲double,以確保在考慮數據類型時不存在問題。目前尚不清楚進入的時間。

+0

謝謝你的幫助。想想我可能已經通過結合你的兩個提示來解決問題。當使用Debug.Print輸出時,我注意到中午的數字並不相同 - 超出2e-11。當我想到差異時,我意識到timeCurrent時間是在電子表格上用填充句柄生成的,但另一次(Vars)是手動輸入的。 重新輸入timeCurrent,現在它可以工作。 非常感謝提示,指出我朝着正確的方向。 – cjgouza