我正在制作一个定制的名册工作表来安排员工的轮班。有些日子,员工必须分班。我正在网上冲浪,并在以下链接中发现这个想法非常令人印象深刻
https://www.findmyshift.com/au/free-excel-roster-template
它上面有vba代码(被锁定为ofcoz),它将单元格值“8 am-2pm”返回到“6”(意味着计算以文本格式给出的时差)。
对于拆分班次,单元格值“8 am-2pm / 4pm-9pm”将返回“11”。
有人可以提供一些代码来获得类似的结果
提前谢谢。
答案 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