2016-03-06 99 views
0

我正在製作一個定製的名冊工作表來安排員工的班次。有些時候員工需要分工。我在網上衝浪,發現這個想法在下面的鏈接相當令人印象深刻。
https://www.findmyshift.com/au/free-excel-roster-template

這有它的vba代碼(這是鎖定ofcoz),它返回單元格值「8 am-2pm」到「6」(意思是計算文本格式給出的時間差)。
對於拆分班次,單元格值「8 am-2pm/4pm-9pm」將返回「11」。

有人能夠爲我提供一個代碼來實現類似的結果。
在此先感謝。如何通過文本值計算時差

+0

看取代,擺脫了上午和下午,再看看分裂,由/第一,然後 - 。所以上午8點到下午2點將8和2放在一個數組中,然後是簡單的數學。今天不在計算機上,所以不能使用郵政編碼 –

回答

1

這是你的功能。它可以處理任何數量的變化,隨着時間或小時和分鐘,並跨越午夜跨越喜歡8:30pm-2:45am

Public Function TimeDifference(s As String) As Variant 
    On Error GoTo Handler 
    Dim shifts() As String 
    Dim result As Double 
    Dim hours() As String 
    Dim duration As Double 
    result = 0 
    shifts = Split(s, "/") 
    For Each shift In shifts 
     hours = Split(shift, "-") 
     duration = TimeValue(hours(1)) - TimeValue(hours(0)) 
     If duration < 0 Then 
      duration = duration + 1 
     End If 
     result = result + duration * 24 
    Next shift 
    TimeDifference = result 
    Exit Function 
Handler: 
    TimeDifference = CVErr(xlErrValue) 
End Function 
+0

我不熟悉TimeValue的使用,這是否確保始終從較大的數字中減去較小的數字? – iShaymus

+0

它在我的代碼中進行管理:如果班次跨越午夜並獲得負值,則該函數會爲結果添加24小時。 – Taosique

+0

我指的是計算輪班的持續時間。 TimeValue函數是計算兩個給定時間之間的時間段,還是隻是給它一個整數/雙倍音高? – iShaymus