¿Cómo calcular horas laboradas entre dos fechas con periodos de descanso?
Quisiera solicitar un poco de ayuda para esta necesidad.
Encontré un código en internet que me permite calcular las horas laboradas entre dos fechas omitiendo los días feriados y los domingos y solo calcula las horas laboradas entre una jornada de horas por día, por ejemplo
De lunes a viernes
De 6am-11pm
Y los sábados
De 6 am-10pm
Lo que necesito es que dentro de esos rangos de horas se tomen en cuenta que de 1030 a 11 am y de 7pm a 730 pm hay un descanso y que estas horas sean no laborables de lunes a sábado.
De antemano muchas gracias, ¡Saludos!
Este es el código:
Function CalculaTiempo_Tejido(hi As Range, hf As Range)
Application.Volatile
fi = CVDate(hi - TimeValue(hi))
ff = CVDate(hf - TimeValue(hf))
'Averiguar el número de días entre las dos fechas.
nd = DateDiff("d", hi, hf)
'Hacer bucle para recorrer todos los días y calcular el tiempo por día.
'======================================================================
For i = 0 To nd
'Hacer bucle para comprobar que no es un día de vacaciones.
f = fi + i
r = 20 'FILA DONDE COMIENZAN LOS FESTIVOS
Do While Cells(r, 51) <> "" 'POSICION DONDE SE ENCUENTRAN LOS DIAS FESTIVOS (FILA 20, COLUMNA 51)
If Cells(r, 51) = f Then
Tiempo = 0
GoTo Saltar
End If
r = r + 1
Loop
'Ver que día de la semana es.
'DIAS DE LUNES A VIERNES///////////
If Weekday(hi + i, 2) <= 5 Then 'DE LUNES A VIERNES (L,M,MM,J,V)
hid = CVDate(hi + i - TimeValue(hi + i) + 6 / 24) 'HORA INICIO JORNADA LAB.
hfd = CVDate(hi + i - TimeValue(hi + i) + 23 / 24) 'HORA FIN JORNADA LAB.
hid1 = CVDate(hi + i - TimeValue(hi + i) + 10.5 / 24) 'pendiente
hid2 = CVDate(hi + i - TimeValue(hi + i) + 11 / 24) 'pendiente
'hid3 = hid2 - hid1 '
'hi = fecha inicio celda
'hid = fecha y hora de inicio de jornada
'hf = fecha fin celda
'hfd = fecha y hora de fin de jornada
'tiempo = hdf-hi
If hi < hid And hf < hfd Then Tiempo = hf - hid 'fecha fin celda -- fecha y hora de inicio de jornada
If hi >= hid And hf <= hfd Then Tiempo = hf - hi 'fecha fin celda -- fecha inicio celda
If hi >= hid And hf >= hfd Then Tiempo = hfd - hi 'fecha y hora de fin de jornada -- fecha inicio celda
If hi >= hfd Then Tiempo = 0
If hi <= hid And hf <= hfd Then Tiempo = hf - hid 'fecha fin celda -- fecha y hora de inicio de jornada
If hi <= hid And hf >= hfd Then Tiempo = hfd - hid 'fecha y hora de fin de jornada -- fecha y hora de inicio de jornada
End If
'DIA SABADO///////////////
If Weekday(hi + i, 2) = 6 Then 'DIA SABADO (S)
hid = CVDate(hi + i - TimeValue(hi + i) + 6 / 24) 'HORA INICIO JORNADA LAB. DIA SABADO
hfd = CVDate(hi + i - TimeValue(hi + i) + 23 / 24) 'HORA FIN JORNADA LAB. DIA SABADO
If hi < hid And hf < hfd Then Tiempo = hf - hid
If hi >= hid And hf <= hfd Then Tiempo = hf - hi
If hi >= hid And hf >= hfd Then Tiempo = hfd - hi
If hi >= hfd Then Tiempo = 0
If hi <= hid And hf <= hfd Then Tiempo = hf - hid
If hi <= hid And hf >= hfd Then Tiempo = hfd - hid
End If
If Weekday(hi + i, 2) = 7 Then
Tiempo = 0
End If
Saltar:
TiempoTotal = TiempoTotal + Tiempo
Next
CalculaTiempo_Tejido = TiempoTotal
End Function