Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Cálculo de tiempo de trabajo de un empleado

| 23 comentarios

Para este artículo elaboré una función personalizada que permite calcular el tiempo laborado por una persona, considerando su fecha de ingreso y su fecha de salida.  La función nos permite conocer el tiempo laborado por la persona, presentando la información de la siguiente manera:

X años, Y meses y Z días.

Para efectos del cálculo del tiempo laborado, consideraremos los siguientes supuestos:

-          Cada mes se considerará como 30 días.

-          Cada año se considerará como 365 días.

La función fue definida con el nombre TiempoTrabajo(), la cual recibe 2 parámetros: fecha de inicio y fecha de fin.

Internamente se manejan 4 variables, las cuales son:

Variable

Descripción

diferenciaDias Es el número total de días que hay entre la fecha de inicio y fin
numAños Número de años transcurridos
numMeses Número de meses transcurridos
numDias Número de días transcurridos

La función efectúa una resta entre la fecha de fin y la de inicio en la variable diferenciaDias, y luego calcula los valores años, meses y días, por medio de las siguientes fórmulas

numAños = Int(diferenciaDias / 365)

numMeses = Int((diferenciaDias - (numAños * 365)) / 30)

numDias = Int(diferenciaDias - (numAños * 365) - (numMeses * 30))

Finalmente estos 3 valores, se concatenan en una cadena para mostrar la información en el formato indicado.

 Código:

Function TiempoTrabajo(fechaInicio As Date, fechaFin As Date) As String
    Dim diferenciaDias As Integer
    Dim numDias As Integer
    Dim numMeses As Integer
    Dim numAños As Integer
    
    diferenciaDias = fechaFin - fechaInicio

    numAños = Int(diferenciaDias / 365)
    numMeses = Int((diferenciaDias - (numAños * 365)) / 30)
    numDias = Int(diferenciaDias - (numAños * 365) - (numMeses * 30))
                
    TiempoTrabajo = numAños & " años, " & numMeses & " meses y " & numDias & " días"   
End Function

Ejemplo

Supongamos que tenemos el siguiente listado de trabajadores de una empresa X, para los cuales tenemos su fecha de ingreso y fecha de salida. Para calcular su tiempo de trabajo emplearemos la función creada anteriormente.

tabla 300x55 Cálculo de tiempo de trabajo de un empleado

(Para mayor visualización de la imagen, hacer click en la misma)

Aplicando la función

fig2 300x15 Cálculo de tiempo de trabajo de un empleado

(Para mayor visualización de la imagen, hacer click en la misma)

Obtenemos la información requerida:

tabla11

(Para mayor visualización de la imagen, hacer click en la misma)

 

Ver archivo Excel

 

Elaborado por Juan Carlos Sánchez

23 comentarios

  1. Este ejemplo resulta muy simple y a la vez muy útil, la verdad no sabía que se podían hacer este tipo de funciones en el Excel así que me resulta muy interesante cada uno de los ejemplos dados en el blog.

  2. Función aplicable que nos puede permitir calcular nuestros beneficios cuando dejamos de laborar con un empleador.

  3. El problema es el siguiente, una persona tiene una fecha inicio contrato y una fecha final del contrato, pero si esta en carrera no va tener una fecha fin, es decir la formula debe coger como fecha final la fecha actual del sistema por que el sigue en continuidad.

    Ejemplo:

    Fecha inicio fecha final contrato tiempo total laborado seria
    dd-mm-aa dd-mm-aa dd-mm-aa
    02/01/2013 01/04/2013 29 – 02 – 00

    Como se está teniendo en cuenta que los meses son de 30 días y el año de 360 días, se debe tener en cuenta que si una persona ingresa:

    el primer día de determinado mes los días deben ser iguales a cero, i contar los meses
    y si el día de ingreso es mayor o igual a 1 se le debe restar como el caso del ejemplo
    la persona ingreso el 02/01/2013 entonces a 30 días se le restan 1, porque ingreso el 02/01/2013, por esto los días dan 29.

  4. Tambien podrias utilizar el operador Mod para evaluar el resto y realizar el calculo:

    numAños = Int(diferenciaDias/365)
    numMeses = (diferenciaDias Mod 365)*30
    numDias = diferencia Dias - numAños*365 - numMeses*365

    Saludos

  5. No pude realizar el calculo de fecha de ingreso y salida de un trabajador en excel ya que como resultado de da #número, no tenes la hoja en excel que me la facilites porfa

  6. Bastante útil esta UDF. Aunque quisiera saber que es lo que hace la instrucción Dim.

    • Dim se utiliza para definir las variables que se utilizará en el programa en el primer caso de definió como entero la variable "diferenciaDias"
      Es una sintaxis del lenguaje visual basic

  7. Como hago para crea esa formula en mi excel no logro encontrar para agregarla a la base de formulas

  8. Muy interesante, me ayudo mucho, gracias por su colaboración, saludos de Peru, Lima.
    Me gustaria saber si tiene algunos cursos mas; para aprender macros.

  9. Una aplicación adicional para esta de UDF es el cálculo de liquidaciones para un trabajador al retirarse de una empresa, ya que es necesario conocer el tiempo de servicio y en conjunto con la escala de liquidaciones que tiene la empresa se podrá calcular cual sería el monto final recibido por el trabajador.

  10. Esa función es muy buena al momento de conocer si la persona puede acceder a un aumento o cambio de puesto , como también a reconocimientos por años de servicios. Además, en algunas empresas el monto liquidado y el monto de bonos depende del tiempo en que uno está laborando en la empresa.

  11. Es bueno el artículo, quisiera por favor me oriente en el sentido como calcular la experiencia laboral de una persona que ha tenido diferentes trabajos en diferentes empresas, por ejemplo:
    Empresa A: del 03/09/2012 al 15/02/2013 (5 meses, 12 días)
    Empresa B: del 22/10/2013 al 10/04/2014 (5 meses, 19 dias)
    Empresa C: del 26/05/2014 al 13/11/2014 (5 meses, 18 dias)
    Empresa D: del 02/09/2014 al 13/03/2015 (6 meses, 11 días)
    Que Fórmula aplicaría para obtener su experiencia laboral? (1 año, 11 meses) Gracias de antemano

  12. No funciona al 100%, si el trabajador ingresa el 1/03/2015 y sale el mismo dia 1/03/2015, ya laboró 1 dia, sin embargo el resultado da 0 años 0 meses 0 dias, alguna manera de arreglarlo? gracias.

    • Para ello a la variable fechaFin (o una variable auxiliary) se le debería sumar 1 antes de la realización de todos los calculus

      • Esta respuesta resulta útil para responder específicamente esa pregunta pero la formula no es exacta; es decir: Si ingresa un 28 de enero (31 días enero) y cesa un 31 de marzo ( 31 días) te calcula "2 meses y 2 días" considerando estricmente que un mes tiene 30 días. El correcto calculo es de 2 meses y 4 días ( febrero, marzo y del 28 de enero 31 de enero).
        Sólo uso la formula para que me de una noción del tiempo trabajado pero de por si, hago mi propio cálculo.

        Saludos

        • "FECHA DE INGRESO" "FECHA FINAL"
          28/01/2019 31/03/2019

          =SIFECHA(H3;I3;"Y")
          =SIFECHA(H3;I3;"YM")
          =SIFECHA(H3;I3;"MD")+1

          Yo me guie con las fechas de ejemplo en las funciones que ingrese y salio :

          AÑOS MESES DIAS
          - 2 4

      • asi mismo... aqui una moficicacion

        Function TiempoTrabajo(fechaInicio As Date, fechaFin As Date) As String

        Dim diferenciaDias As Integer
        Dim numDias As Integer
        Dim numMeses As Integer
        Dim numAños As Integer

        diferenciaDias = fechaFin - fechaInicio

        numAños = Int(diferenciaDias / 365)
        numMeses = Int((diferenciaDias - (numAños * 365)) / 30)

        If fechaInicio = fechaFin Then
        numDias = Int(diferenciaDias - (numAños * 365) - (numMeses * 30) + 1)
        Else
        numDias = Int(diferenciaDias - (numAños * 365) - (numMeses * 30))
        End If

        TiempoTrabajo = numAños & " años, " & numMeses & " meses y " & numDias & " días"

        End Function

    • aqui una modificacion con un condicional para mostrar en este caso
      0 años, 0 meses y 1 día

      aqui el codigo:

      Function TiempoTrabajo(fechaInicio As Date, fechaFin As Date) As String

      Dim diferenciaDias As Integer
      Dim numDias As Integer
      Dim numMeses As Integer
      Dim numAños As Integer

      diferenciaDias = fechaFin - fechaInicio

      numAños = Int(diferenciaDias / 365)
      numMeses = Int((diferenciaDias - (numAños * 365)) / 30)
      numDias = Int(diferenciaDias - (numAños * 365) - (numMeses * 30))

      If fechaInicio = fechaFin Then

      TiempoTrabajo = "0 años, 0 meses y 1 día"
      Else

      TiempoTrabajo = numAños & " años, " & numMeses & " meses y " & numDias & " días"

      End If

      End Function

  13. Buenas tardes... Tengo una pregunta
    Pasa que debo calcular el tiempo trabajado de unos trabajadores...
    Tengo la fórmula de FF-FI + la constante de 1 día...
    Pero tengo entendido que si por ejemplo el mes de la fecha final tiene 31 días, se cuentan sólo 30 días...
    Qué pasa cuando es un mes de 30 o 28/29 días?
    Muchísimas gracias!

  14. Estoy inmensamente agradecida por este aporte!

  15. Hola,

    Sumaste por separado cada experiencia laboral, como puedo calcular su EXPERIENCIA TOTAL.

    Gracias.

  16. no puedo hallar con la formula me indica valor

  17. una observación si un trabajador inicio sus labaores 01/08/2021 y x razones decide trabajar solo hasta el 02/08/2021; cuántos días trabajados tiene, uno o dos?

Deja una respuesta

Los campos requeridos estan marcados con *.