Con frecuencia queremos saber los dias, meses y años que hay entre dos fechas. Por ejemplo, los años, meses y dias que tiene una persona en el dia de hoy, o los dias, meses y años que faltan para una fecha determinada a partir de hoy, o la antigüedad (dias, meses y años) que tiene un empleado en una empresa...
Tratemos este ultimo ejemplo. Para ello vamos a ver las ventajas e incovenientes de las funciones dia(), mes() y año(). Una posible solución es la función sifecha(fec1;fec2;modo) que comentaremos más adelante.
Comencemos por los datos de entrada: suponemos que tenemos una lista de empleados (B2:B12) con las fechas de alta (C2:C12) en la empresa que vemos en la imagen siguiente. Por supueso que los datos pueden estar en cualquier otra referencia...
Suponemos que hoy es 24 de Mayo del 2012 que obtenemos con la función =hoy() en la celda B12 la cual devuelve la fecha del sistema, igualmente suponemos que no puede haber nunca una fecha de alta que sea posterior a la fecha de hoy...
Vamos autilizar la función año(fecha) para saber los años que un empleado lleva en la empresa. La expresión que calcula los años puedes verla en la imagen inferior:
1. La referencia B2 devuelve el nombre del empleado.
2. El operador "&" une o concatena el nombre con la palabra " lleva "
3. La expresión año(hoy()) devuelve el año 2012.
4. La expresión año(C2) devuelve el año de alta del empleado.
5. Como restamos la expresión año(hoy())-año(C2) obtenemos el número de años.
6. Concatenamos con " años" para completar la fórmula...
Para Ana el resultado será Ana lleva 2012-2012=0 años, es decir Ana lleva 0 años, lo cual es bien cierto puesto que Ana fue dada de alta 01/05/2012...
Para Jose el resultado será Jose lleva 1 año lo cual no estrictamente cierto puesto que fué dado de alta el 25/05/2011 y en realidad lleva 11 meses y 30 dias, mañana 25/05/2012 llevará exactamente un año. Más adelante veremos como conseguir esto...
Respecto a Ernesto tenemos que decir que hasta el mes de Julio no llevará 10 años...
En resumen, la expresión anterior nos devuelve el número de años entre dos fechas pero puede ocurrir que se contabilice un año como completo cuando en realidad puede que no sea completo...
Respecto a las funciones mes() y dia() podemos proceder de la misma manera, pero la expresión solo restará meses sin tener en cuanta los años lo cual producirá datos inexactos, además los meses tienen 30, 31 o 28-29(Febrero) dias...
Las dos imagenes siguiente muestran los datos nada legibles que obtendremos con la expresión anterior...
SOLUCION: la función sifecha(fec1;fec2;tipo)
Esta función devuelve el número de años, meses y dias completos entre dos fechas. Es decir, entre la fecha de alta de Jose (25/05/2011) y la fecha de hoy (24/05/2012) no hay 1 año completo aunque falta muy poco (1 dia), por tanto una fórmula que calcule los años de Jose en la empresa deberá devolver 0 años como muestra la imagen inferior...
Esta función lleva tres parámetros:
fec1: es decir la fecha más antigüa. En nuestro ejemplo será la fecha de alta en la empresa.
fec2: será la fecha de hoy.
tipo: puede ser alguno de los siguientes valores: "y", "m", "d", "ym", "yd" y "md".
"y" años completos entre dos fechas.
"m" meses completos entre dos fechas.
"d" dias entre dos fechas.
"ym" meses completos entre dos fechas sin tener en cuenta el año.
"yd" dias entre dos fechas sin tener en cuenta el año.
"md" dias sin tener en cuenta el año ni el mes.
En la imagen siguiente vemos las fórmulas que calculan los años, meses y dias de cada empleado.
Ana lleva realmente 0 años, 0 meses y 23 dias puesto que desde 1/05/2012 hasta hoy 24/05/2012 hay sólo 23 dias.
José lleva 0 años completos, en meses completos lleva 11 con algunos dias y en dias en total 365. En realidad lleva 0 años, 11 meses y 30 dias que calcularemos más adelante...
Luis lleva 1 año completo, es decir 15 meses completos o 465 dias...
Pero no es exactamente lo que pretendíamos. Los años los cuenta cuando están completos, asi que no hay nada que cambiar, pero los meses los cuenta entre las dos fechas y lo que yo quiero es que una vez contados los años cuente sólo los meses en el último año, es decir cuente los meses en el mismo año o lo que es lo mismo no tenga en cuenta el año. El tipo "ym" me devuelve justamente esto...
La imagen siguiente muestra las fórmulas que buscabamos...
Para terminar podemos escribir una sola fórmula más compacta en una sola celda como muestra la imagen inferior...