如何计算文本值的时差

时间:2016-03-06 08:52:20

标签: excel vba excel-vba

我正在制作一个定制的名册工作表来安排员工的轮班。有些日子,员工必须分班。我正在网上冲浪,并在以下链接中发现这个想法非常令人印象深刻 https://www.findmyshift.com/au/free-excel-roster-template

它上面有vba代码(被锁定为ofcoz),它将单元格值“8 am-2pm”返回到“6”(意味着计算以文本格式给出的时差)。
对于拆分班次,单元格值“8 am-2pm / 4pm-9pm”将返回“11”。

有人可以提供一些代码来获得类似的结果 提前谢谢。

1 个答案:

答案 0 :(得分: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