sábado, octubre 06, 2007

CONTAR.SI con rangos en varias hojas de Excel

Entre las muchas consultas (más de 50 y que serán respondidas por lo que pido paciencia a mis lectores) que se han acumulado durante mis vacaciones me encuentro con la siguiente:

Si uso CONTAR.SI en el rango de una hoja me funciona perfectamente, pero me sale
error si lo uso en un rango 3D (en varias hojas)

La función nativa CONTAR.SI de Excel no funciona con rangos tridimensionales. Una posibilidad es usar la función COUNTIF.3D del complemento desarrollado por Laurent Longre, y que ya había mencionado en mi nota sobre la función INDIRECTO con cuadernos Excel cerrados. Este complemento (add-in) puede descargarse del sitio de Laurent.
Una vez instalado el complemento, accedemos a la función el asistente de funciones




La función tiene los mismos argumentos que la función CONTAR.SI nativa de Excel



Hay que tener en cuenta que si la referencia es a un archivo remoto, éste tiene que estar abierto.

Me permito agregar que el complemento de Laurent Longre contiene una miríada de funciones muy útiles.


Otra solución es crear una función definida por el usuario (UDF), como las que aparecen en esta nota de Daily Dose of Excel.

En los próximos días espero publicar una nota más amplia sobre el tema de fórmulas tridimensionales en Excel.


Technorati Tags:

miércoles, septiembre 05, 2007

JLD de Vacaciones

Queridos Lectores

desde el próximo viernes, 7 de setiembre, hasta el 3 de octubre estaré de vacaciones, tal como ya les había comentado.

Durante mis vacaciones este blog permancerá inactivo y tampoco responderé a mails.

Hasta pronto


Technorati Tags:

sábado, agosto 25, 2007

Calcular intervalos en Excel con SIFECHA

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 SIFECHA (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 583

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,"y") 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: