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.
(Para mayor visualización de la imagen, hacer click en la misma)
Aplicando la función
(Para mayor visualización de la imagen, hacer click en la misma)
Obtenemos la información requerida:
(Para mayor visualización de la imagen, hacer click en la misma)
Elaborado por Juan Carlos Sánchez
10/11/2012 a las 11:56 pm
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.
11/11/2012 a las 9:23 pm
Función aplicable que nos puede permitir calcular nuestros beneficios cuando dejamos de laborar con un empleador.
26/04/2013 a las 2:16 pm
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.
25/05/2013 a las 8:31 pm
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
15/06/2013 a las 7:48 am
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
01/02/2014 a las 7:39 pm
Bastante útil esta UDF. Aunque quisiera saber que es lo que hace la instrucción Dim.
13/09/2022 a las 11:12 pm
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
19/04/2014 a las 11:57 pm
Como hago para crea esa formula en mi excel no logro encontrar para agregarla a la base de formulas
09/07/2014 a las 2:51 pm
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.
20/07/2014 a las 2:13 pm
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.
02/08/2014 a las 4:00 pm
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.
13/11/2015 a las 10:27 am
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
13/01/2016 a las 12:03 am
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.
01/07/2016 a las 1:51 pm
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
09/02/2017 a las 4:57 pm
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
06/03/2020 a las 10:29 am
"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
01/11/2017 a las 11:49 am
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
01/11/2017 a las 11:44 am
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
10/08/2016 a las 5:50 pm
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!
02/06/2017 a las 8:49 am
Estoy inmensamente agradecida por este aporte!
01/04/2018 a las 5:48 pm
Hola,
Sumaste por separado cada experiencia laboral, como puedo calcular su EXPERIENCIA TOTAL.
Gracias.
16/06/2020 a las 12:37 pm
no puedo hallar con la formula me indica valor
27/03/2022 a las 3:08 pm
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?