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)