En este artículo, consideraremos cómo calcular las horas de trabajo entre dos fechas. Esta información puede ser necesaria tanto para el análisis de la eficiencia del trabajo de los empleados como para el cálculo del tiempo útil invertido en el caso de un sistema de pago a destajo.
Entonces, escribamos nuestra propia función para ayudarnos a contar las horas de trabajo y llamémosla WORKHOURS.
abre el menú Servicio - Macro - Editor Visual Basic , inserte el nuevo módulo (menú
Function WORKHOURS(StartDate As Variant, EndDate As Variant)
Application.Volatile
StartDate = StartDate.Address
EndDate = EndDate.Address
' horas de trabajo del primer día
WORKHOURS1 = Evaluate("IF(AND(DAY(" & StartDate & ")=DAY(" & _
EndDate & "),MONTH(" & StartDate & ")=MONTH(" & EndDate & "))," & EndDate & _
"-" & StartDate & "-IF(AND(HOUR(" & StartDate & ")<=13,HOUR(" & EndDate & _
")>=14),1/24,0),18/24-MOD(" & StartDate & ",1)-IF(HOUR(" & StartDate & _
")<=13,1/24,0))")
' jornada laboral de días intermedios
WORKHOURS2 = Evaluate("MAX((IF(AND((WEEKDAY(" & EndDate & ",2))"&"<"&"(WEEKDAY(" & StartDate & _
",2)),((WEEKDAY(" & StartDate & ",2))-(WEEKDAY(" & EndDate & ",2)))>1),(((DATEDIF(" & StartDate & _
"," & EndDate & "," & """D""" & ")+1))-(FLOOR((DATEDIF(" & StartDate & "," & EndDate & _
"," & """D""" & ")+1)/7,1)*2)-2),(((DATEDIF(" & StartDate & "," & EndDate & "," & """D""" & ")+1))-(FLOOR((DATEDIF(" & _
StartDate & "," & EndDate & "," & """D""" & ")+1)/7,1)*2)))-2),0)*8/24")
' horas de trabajo del último día
WORKHOURS3 = Evaluate("IF(AND(DAY(" & StartDate & _
")=DAY(" & EndDate & "),MONTH(" & StartDate & ")=MONTH(" & EndDate & ")),0,MOD(" & EndDate & _
",1)-9/24-IF(HOUR(" & EndDate & ")>=14,1/24,0))")
WORKHOURS = WORKHOURS1 + WORKHOURS2 + WORKHOURS3
End Function
Cierre el editor Visual Basic y regrese a Excel.
Ahora en Maestros de funciones en la categoría Usuario definido puede encontrar nuestra función WORKHOURS y utilizarla. Sintaxis de función siguiente:
=HORATRABAJOS(fecha_inicio; fecha_final)