Calcular intervalos en Excel con SIFECHA

sábado, agosto 25, 2007

Supongamos que la fecha de hoy es el 1/1/2007 y nos preguntamos cuántos días faltan hasta la apertura de los Juegos Olímpico. Si queremos hacer el cálculo con Excel, ponemos la fecha actual en una celda, la fecha de la apertura en otra y en una tercera efectuamos la resta:




Como vemos, 583 días. Si queremos expresar el resultado en términos de años, meses y días, podemos usar la función sifechaSIFECHA (DATEDIF en la versión inglesa). Esta función, que es una función total y absolutamente normal de Excel pero no está documentada, excepto en XL2002, a pesar que existe desde la versión 5 de Excel.


La función SIFECHA usa tres argumentos: fecha de inicio, fecha final y tipo de intervalo. Siguiendo con nuestro ejemplo, podemos usar esta fórmula para calcular el intervalo en días

=SIFECHA(A1,B1,"d") que da 581

si queremos calcular la cantidad de meses usamos

=SIFECHA(A1,B1,"m") que da 19, es decir la cantidad entera de meses en el intervalo

y si queremos la cantidad de años

=SIFECHA(A1,B1,"m") que da 1, la cantidad entera de años.

Si queremos calcular la cantidad de días por encima de la cantidad entera de años en el intervalo, usamos el argumento "yd" de la siguiente manera

=SIFECHA(A1,B1,"yd") que da 217, es decir la cantidad de días desde el 01/01/2008 hasta el 06/08/2008

De la misma manera podemos calcular la cantidad entera de meses, por encima de la cantidad de años en el intervalo con

=SIFECHA(A1,B1,"ym") que da 7 (hay que recordar que siempre obtenemos números enteros)

o días no incluidos en la cuenta de los meses

=SIFECHA(A1,B1,"md") que da 5

Como ven, podemos combinar estas fórmulas y exhibir el resultado de la siguiente manera



La función SIFECHA no tiene un argumento que nos permita calcular las semanas. Para esto podemos usar la fórmula

=ENTERO((B1-A1)/7) que da 83

Si queremos expresar el intervalo hasta las Olimpíadas en términos de años, meses, semanas y días, tenemos que usar esta fórmula para calcular las semanas

=ENTERO(SIFECHA(A2;B2;"md")/7), es decir, primero calculamos la cantidad de días "libres" (no incluidos en la cuenta de los meses) y los dividimos por 7.



Si queremos expresar el resultado en una sola celda, incluyendo el texto, podemos usar la concatenación de esta manera

=SIFECHA(A2;B2;"y")&" año "&SIFECHA(A2;B2;"ym")&" meses "&SIFECHA(A2;B2;"md")&" días"

Nuestra querida lengua castellana nos complica un poco las cosas, ya que debemos respetar los singulares y los plurales, para lo cual usaremos la función SI

=SIFECHA(A2;B2;"y")&SI(SIFECHA(A2;B2;"y")=1;" año ";" años ")&SIFECHA(A2;B2;"ym")&SI(SIFECHA(A2;B2;"ym")=1;" mes ";" meses ")&"y "&SIFECHA(A2;B2;"md")&SI(SIFECHA(A2;B2;"md")=1;" día";" días")

Como esta fórmula es un tanto larga y engorrosa, podemos incluirla en un nombre para facilitar la lectura de las celdas en nuestra hoja. Lo que hacemos es poner esta fórmula en un nombre



Una aplicación más práctica de esta función es crear una tabla de antigüedad de empleados, como me pedía uno de mis lectores:



En la celda B1 ponemos la función =HOY(), para obtener el día corriente; en las celdas donde queremos calcular la antigüedad usamos el nombre "lapso_rel" que contiene la fórmula usada en "lapso" con una pequeña pero importante modificación. Como hemos de copiar este nombre a lo largo de un rango, debemos usar referencias relativas a las celdas de la fecha inicial de los empleados, pero la referencia a la fecha corriente debe ser absoluta:

=SIFECHA(Hoja1!B3;Hoja1!$B$1;"y")&SI(SIFECHA(Hoja1!B3;Hoja1!$B$1;"y")=1;" año ";" años ")&SIFECHA(Hoja1!B3;Hoja1!$B$1;"ym")&SI(SIFECHA(Hoja1!B3;Hoja1!$B$1;"ym")=1;" mes ";" meses ")&"y "&SIFECHA(Hoja1!B3;Hoja1!$B$1;"md")

Otra variante sería utilizar la función HOY() dentro de la fórmula, en lugar de ponerla en una celda auxiliar

=SIFECHA(Hoja1!B3;Hoja1!HOY();"y")&SI(SIFECHA(Hoja1!B3;Hoja1!HOY();"y")=1;" año ";" años ")&SIFECHA(Hoja1!B3;Hoja1!HOY();"ym")&SI(SIFECHA(Hoja1!B3;Hoja1!HOY();"ym")=1;" mes ";" meses ")&"y "&SIFECHA(Hoja1!B3;Hoja1!HOY();"md")





Technorati Tags:

34 comments:

jose Juan,  28 agosto, 2007 01:55  

Hola:

Nuevamente yo. (anteriormente solicite ayuda para conteios ciclicos)

ahora tengo un dilema.
debo entregar a un usuario un reporte que le facilite su toma de deciciones
esto para el area de compras principalmente. el caso es que logre hacer el reporte en cierta forma usando tablas dinámicas, pero no quiero que realice ninguna operacion (suma, multiplicacion, diferencia etc) sobre los datos que agrego a dicha area. es decir simplemente quiero que me los muestre.

ejemplo:

tabla: proveedor, marca, estilo, color, talla, costo, descuento, iva, util, precio


- coloco proveedor como encabezado (ya que las consultas las va a realizar por proveedor)
- seguido de marca (un proveedor puede tener mas de una)
- despues en columna Intento colocar El Estilo y tal vez alguno otro de los datos mencionados, pero al Igual que al colocarlos en el area de datos me trata de realizar la Operacion que viene predeterminada.


el problema que encuentro aqui es q no me da opcion a dejar los datos asi sin Operacion alguna. (Habrá alguna otra forma de hacer esto????)

lo que el usuario quiere hacer es seleccionar el proveedor y una marca del mismo y
con ello verá un listado de los estilos (productos) q nos da ese proveedor asi como los demas datos de cada estilo (producto), con lo cual el comprador podrá tener un mayor-mejor criterio para realizar sus pedidos.


como le mencione con anterioridad ya se hace con la tabla dinámica pero tambien el Excel hace una operacion sobre los datos que le pongo y eso es lo q no quiero
que sume o promedie los %'s o precios como lo hace actualmente :(



algo asi es lo que quiero que de de resultado
proveedor
marca


estilos color material costo desc precio util
1 bco piel 1 3% 5 25%
2 bco-mno piel 10 3% 50 25%
1 bco piel 1 3% 5 25%
1 bco piel 1 3% 5 25%


espero explicarme. y que me pueda ayudar a encontrar una buena solucion
gracias y saludos desde mexico.

Pogo 28 agosto, 2007 19:15  

Hola!... encuentro increíblemente útil tu blog pero tengo una duda que no logré clarificar.

Tengo un rango de celdas al cual le asigné el nombre "Validos", y estoy necesitando una fórmula que, al momento de teclear un valor, me diga si existe en ese rango de celdas o no.

Por ejemplo, si en el rango de celdas tengo 10,20,30,40,50 y en la celda C2 (la que estoy evaluando) meto 10 me dice "Encontrado", pero si meto 20 me dice "No encontrado", es decir, solo me está evaluando el primer elemento del rango, cómo logro que me busque en todas las celdas del rango???

Ésta es la fórmula que estoy usando.

=SI(C2=Validos,"Encontrado","No encontrado")

Gracias por tu atención.

Jorge L. Dunkelman 28 agosto, 2007 21:10  

Hola José Juan
tu consulta no está relacionada con el tema de la nota. Mandame una copia del archivo o un ejemplo y seguiremos la consulta por mail (jorgedun@gmail.com).

Pogo 29 agosto, 2007 22:28  

Gracias!. Es útil tu solución, encontré ésta otra:

=SI(BUSCAR(C2,cctvalidas)=C2,"Encontrado","No encontrado")

Donde C2 es la celda evaluada y cctvalidas es el nombre del rango de celdas + 1, es decir, si los datos van de a1 hasta a20 se debe crear el rango desde a1 hasta a21, por qué?, no lo sé jejeje. Saludos!

Josep M.M. 25 septiembre, 2007 13:26  

En primer lugar felicitarte por tu blog.
Seguidamente una pequeña corrección
en la expresión siguiente
=SIFECHA(A1,B1,"m") que da 1, la cantidad entera de años.

Las celdas deben referenciarse a A2 y B2 y el tercer parámetro para años es "y"

Jorge L. Dunkelman 04 octubre, 2007 21:58  

Efectivamente Josep. Gracias por la observación.

Carlos Salima 06 octubre, 2007 14:30  

Hola Jorge, en realidad se ve que eres todo un Master en Excel, y en realidad agradecía todo el apoyo que has aportado a esta comunidad.

Pues te comento que tengo un problema y es el siguiente:

Tengo que llevar el control de una Planillas la cuales posen un serial correlativo.

Al principio pense es sencillo, resto el ultimo serial por el el serial inicial y me da el numero de planillas en total.

Cuando me sorpresa me he dado cuenta que me suma un numero de mas, ejmp:

=C6-B6
el valor de la Columna c6 es: 3 y el de la b6 es:1 y la formula en excel me da:2 "es logico" 3-1=2, pero sabemos que el numero de existencia de planillas son 3 y no 2.

Otro ejemplo que realice es este:
el valor de la Columna c6 es: 121 y el de la b6 es:20 y la formula en excel me da como resultado:101, lógico 121-20=101 pero sabemos que la existencia real de planilla es de 100.

Que solucion me puede brindar?

Jorge L. Dunkelman 07 octubre, 2007 23:22  

Hola Carlos

no se si enterpreto correctamente tu consulta, pero cuando calculas una diferencia y quieres que ambos extremos estén incluidos en el cálculo, debes agregar 1.
Para contar el número de elementos en un rango es más conveniente usar las funciones CONTAR o CONTARA.

Anónimo,  24 octubre, 2007 17:51  

Primero de todo felicitar al autor del blog, que gran descubrimiento acabo de hacer y lo que pienso aprender de él. Gracias por hacerlo posible.

Un apunte sobre el calculo de las fechas, en el caso que queden 7 dias o mas surge el problema de que nos pone la semanas correctamente pero nos sigue manteniendo los dias. Por ejemplo si pongo fecha 30/08/2008 me salen 4 semanas pero me sigue poniendo 29 dias. Lo he solucionado poniendo en la casilla D5 la funcion RESIDUO(SIFECHA(A2;B22;"md");7) y ya me pone correctamente 1 dia.

Espero aprender mucho con tu blog, un saludo.

Anónimo,  28 octubre, 2007 01:30  

Saludos, y felicitaciones por el BLOG.

Mi nombre es Nestor y Cuando uso la función SIFECHA me devuelve error de numero(#¡NUM!), como soluciono esto. Aparentemente no tengo la función "SIFECHA" en el excel 2002 y Excel 2007.

Saludos

Jorge L. Dunkelman 28 octubre, 2007 17:53  

Hola,
sí tienes la función en tu versión de Excel. Si no la tuvieras el error sería #NOMBRE?
El error #NUM! indica que hay algo errado con los argumentos de la función.
Intenta cambiar el orden de las fechas en la función. En esta función el primer argumento es la fechas "menor". Por ejemplo, si las fechas son 10/07/2007 y 24/10/2007, el primer argumento debe ser la celda que contiene 10/07/2007.

Martin 24 marzo, 2008 18:16  

Hola, para empezar felicitarte por tu blog, esta muy bien. Yo lo que quiero hacer es pasar horas a años, meses, dias y horas. osea imaginate:
A1= 250horas y que en A2 me pasara esa cifra a lo que dije anteriormente.
Es para calcular el tiempo trabajado.
Muchas gracias

Jorge L. Dunkelman 24 marzo, 2008 23:44  

Hola Martín aquí va una explicación breve. Más adelante publicaré en el blog una explicación más detallada.
Suponiendo que en la celda A1 tienes el número 250 (y no con formato de hora y/o fecha, sino como número), tienes que dividirlo primero por 24. Así que ponemos 24 en la celda A2, y en la celda A3 hacemos la división lo que da 10,416667. En una celda libre pones esta fórmula

=SIFECHA(0;A3;"y")&" años - "&SIFECHA(0;A3;"m")&" meses - "&SIFECHA(0;A3;"md")&" días y "&HORA(A3-ENTERO(A3))&" horas"

el resultado será

0 años - 0 meses - 10 días y 10 horas

Si en A1 tienes la hora con formato de horas, es decir 250:00:00 (lo que quiere decir que has usado el formato [hh]:mm:ss), no hay necesidad de dividir por 24.

Torneos Xbox360 23 abril, 2008 22:02  

exelente blog los felicito por esta gran labor de ayudar a los demas y quisera saber si me pudieran ayudar con lo siguiente.... Quisiera hacer una hoja donde me calcule el costo menor que me dan mi proveedor... osea incluir los precios de mis proveedores y que me calculara cual es el costo menor y de que proveedor es ese costo

Jorge L. Dunkelman 24 abril, 2008 11:53  

Hola
la consulta no está relacionado con el tema de la nota (esto es un blog, no un foro). De todas maneras, tienes que usar la función MIN para obtener el menor valor de un rango. Luego puedes usar INDICE o alguna otra función de búsqueda para obtener el nombre del proveedor cuyo precio es el que aparece como resultado de MIN.

Anónimo,  08 julio, 2008 14:13  

Hola Jorge,
Yo estoy calculando la antigüedad de los trabajadores y no tengo la formula sifecha;:que fórmula puedo usar en su defecto???
Muchas gracias
Alicia A

Jorge L. Dunkelman 09 julio, 2008 07:59  

Hola Alicia

¿qué versión de XL estás usando? Creo que SIFECHA ya existía en XL en versiones anteriores a XL97. Por algún motivo, esta función no aparece en la lista de funciones, pero que existe, existe.
Te recomiendo probar escribir la función con esta sintaxis:

=SIFECHA(fecha anterior, fecha posterior, "m")

Si no funciona usar DATEDIF en lugar de SIFECHA.

Nemi 17 junio, 2010 04:59  

Mi estimado, ante todo dejame felicitarte por excelente e ilustrativo Blog. En esta ocasión, recurro a ti para una consulta:
En la siguiente fórmula, =SIFECHA(A3,B3,"y")&" años, "&SIFECHA(A3,B3,"ym")&" meses y "&SIFECHA(A3,B3,"md")&" días" ´
Cuál es el significado de los términos "y", "&", "ym", "md". Muchas gracias por tu ayuda, atentamente Héctor.

Jorge L. Dunkelman 17 junio, 2010 07:06  

Nemi,
SIFECHA calcula intervalos en términos de años, meses o días. De aquí:
"y" = años (year en inglés)
"m" = meses (month)
"d" = días (days)
"ym" = la cantidad de meses por encima de la cantidad de años calculada

Está todo explicado en la nota.

Anónimo,  23 julio, 2010 20:28  

Muchas gracias por la información, me fue muy últil.

Sólo hice una pequeña modificación en la información para que me saliera la diferencia exacta de AA/MM/DD

=SIFECHA(A1,B1,"y") da la cantidad de años desde el 01/01/2008 hasta el 06/08/2008

De la misma manera podemos calcular la cantidad entera de meses, por encima de la cantidad de años en el intervalo con

=SIFECHA(A1,B1,"ym") que da 7 (hay que recordar que siempre obtenemos números enteros)

o días no incluidos en la cuenta de los meses

=SIFECHA(A1,B1,"md") que da 5

Anónimo,  16 agosto, 2010 21:05  

HOLA DISCULPA LA MOLESTIA TENGO UNA DUDA
TENGO DOS FECHAS UNA INCIAL Y DE CIERRE
LA INICAL ES 31/08/2007 Y LA DE CIERRE ES 30/06/2010 SACANDO CON LA FORMULA ME SALE 33 MESES PERO SACANDO A MANO SACO 35 DIAS ESA ES LA DUDA FAVOR SI ME PUDIESES AYUDAR GRACIAS

Jorge L. Dunkelman 16 agosto, 2010 23:19  

Estimado,
aún calculando a mano desde agosto del 2007 hasta junio del 2010 debe haber 34 meses. ¿Qué fórmula estás usando y con qué argumentos?

Anónimo,  01 noviembre, 2010 00:44  

podrian ayudarme como calculo los dias horas y minutos si en diferentes celdas tengo fecha inicial, hora inicial, fecha final y hora final saludos

Jorge L. Dunkelman 02 noviembre, 2010 14:59  

Combinando en una celda la fecha inicial con la hora inicial y en una segunda celda la fecha final con la hora final.

Luis,  24 septiembre, 2011 09:40  

Hola,

muchas gracias por el post, es muy interesante. Pero no consigo hacerlo funcionar con Excel 2007. Para empezar con algo sencillo, estoy usando esta fórmula:

=SIFECHA(E2;HOY( );”Y”)

Me sale un error del tipo #¿NOMBRE?

Le doy a 'Mostrar pasos de cálculo...' y aparece una ventana que muestra la evaluación de la fórmula:

SIFECHA(26907; 40810; "Y")

El número '40810' está en cursiva.
La expresión "Y" aparece subrayado.

He probado a cambiar "Y" por "y", "years", "A", "años", ... pero el error persiste.

¿Puedes echarme un cable?


Gracias de antemano.

Jorge L. Dunkelman 24 septiembre, 2011 12:32  

Luis,
el error #¿NOMBRE? indica que Excel no reconoce alguna de las dos funciones SIFECHA u HOY. Revisa las funciones. Otra posibilidad es usarlas en inglés: DATEDIF y TODAY

Onesh00t 27 septiembre, 2011 22:09  

estuve como loco buscando la bendita función SIFECHA y no la encontraba, busque en el mismo excel y encontré su equivalente que es FRAC.AÑO.

Jorge L. Dunkelman 27 septiembre, 2011 22:17  

No exactamente. FRAC.AÑO calcula en días la fracción de año entre dos fechas. SIFECHA calcula días, años, meses. etc.
SIFECHA no esta documentada en la ayuda de Excel.

ProfePitufo 20 octubre, 2011 20:43  

No encuentro la función SIFECHA por ningún lado, cuando la uso me da un error #NAME?. ¿Que se puede hacer?. Tampoco la reconoce en inglés.

Jorge L. Dunkelman 21 octubre, 2011 00:11  

En inglés la función se llama DATEDIF. Asegurate de poner el tercer argumento (la unidad de tiempo) entre comillas. Si no pones las comillas, por ejemplo

SIFECHA(A1,B1,ym)

Excel trata de interpretar ym como si fuera un nombre y al no existir de el erro #NAME!

Anónimo,  19 enero, 2012 11:29  

Gracias.

Muy útil si usas todavía Excel 2003.

Un saludo

karunchi 06 mayo, 2012 02:22  

hola quisiera saber si me podrias ayudar con dicha funcion ..estoy haciendo una planilla para ingresar la fecha q ingresa un interno ej.12/02/2000(celda A), en la otra celda coloco el computo de su pena ej.:2años y 6 meses...mi consulta es como obtengo el resultado de la finalizacion de la pena? o sea q m indique la fecha de finalizacion...muchas gracias

Jorge L. Dunkelman 07 mayo, 2012 20:52  

Tienes que hacerlo con la función FECHA.MES. Esta función hace el cálculo por meses, aasí que en tu caso sería
=FECHA.MES(FECHANUMERO("12/02/2000"),30)

o si en la celda A1, por ejemplo, está la fecha de ingreso y en la celda A2 los meses

=FECHA.MES(A1,A2)

Publicar un comentario

Comentarios Recientes

Seguidores

Estadísticas

Entradas publicadas a la fecha

Apoyar JLD Excel

Términos Legales

  © Blogger template On The Road by Ourblogtemplates.com 2009

Back to TOP