jueves, agosto 28, 2008

Calcular semestres o trimestres en Excel.

Excel cuenta con varias funciones que nos permiten calcular, por ejemplo, el día, el mes o el año dada una determinada fecha.
Por ejemplo, si en la celda A1 tenemos la fecha 27/08/2008, la fórmula =DIA(A1) da como resultado 27; la fórmula =MES(A1) da como resultado 8 y la fórmula =AÑO(A1) dará como resultado 2008.
Excel no tiene funciones nativas para calcular otros intervalos como el semestre del año o el trimestre del año.
Para calcular el trimestre del año de una determinada fechas podemos usar una de estas fórmulas

=REDONDEAR.MAS(MES(A1)/3,0)

=COINCIDIR(MES(A1),{1;4;7;10})

En la primer fórmula obtenemos primero el número de mes con la función MES, luego lo dividimos por 3, el número de meses que hay en cada trimestre y finalmente redondeamos el resultado hacia arriba para obtener el número de trimestre.
En nuestro ejemplo,

=MES(A1) da 8

8/3= 2.666667

=REDONDEAR.MAS(2.666667) = 3

La segunda fórmula usa una constante matricial como matriz de búsqueda en la función COINCIDIR. Siguiendo con nuestro ejemplo, =MES(A1) da 8, que coincide con el tercer elemento de la constante matricial.

Si queremos calcular el semestre del año a partir de la fecha, podemos usar una de estas fórmulas

=REDONDEAR.MAS(MES(A2)/6,0)

=COINCIDIR(MES(A2),{1;7})

Y cómo calculamos la semana del año a partir de la fecha? Bien, Chip Pearson propone esta fórmula


=TRUNCAR(((A1-FECHA(AÑO(A1),1,1))/7))+1+SI(DIASEM(FECHA(AÑO(A1),1,1))>DIASEM(A1),1,0)




Technorati Tags:

martes, agosto 26, 2008

Crear vínculos con Pegado Especial

Ya hemos mostrado algunos de los usos de Pegado Especial en Excel. Una de las posibilidades es la de crear vínculos a la celda o al rango que estamos copiando. Esto la hacemos usando la opción Pegar Vínculos



Al copiar el rango A1:A5 usando esta opción vemos el valor de la celda A1 en la celda B4, pero en la barra de fórmulas vemos que Excel a creado una referencia a la celda de origen



También podemos usar esta opción para crear referencias al rango en otra hoja



Y también crear vínculos a cuadernos remotos



Excel tiene un comportamiento un tanto curioso con esta opción. Al copiar rangos usando Pegar Vínculos, el vínculo es creado como referencia relativa (sin los símbolos $ en la referencia). En cambio se usamos Pegar Vínculos para copiar una única celda, Excel creará una referencia absoluta (es decir $A$1).

Otra forma de copiar creando vínculos es arrastrando el rango a copiar presionando al mismo tiempo la tecla Mayúsculas (o Ctrl o Alt). Al arrastrar el rango a copiar presionamos el botón derecho del ratón



Al igual que con el menú de Pegado Especial, si copiamos una única celda se creará una referencia absoluta. Si lo hacemos con un rango de celdas, la referencia será relativa.



Technorati Tags:

miércoles, agosto 20, 2008

Calcular fracciones de año

Ya hace varios días que no sólo no publico notas en este blog, sino que tampoco estoy respondiendo a los muchos mails que recibo con todo tipo de consultas.
Así que a modo de disculpa hasta que encuentre el tiempo de ir respondiendo a las consultas que han llegado, va aquí una sugerencia sobre como calcular fracciones de año.
Excel dispone de muchas funciones que permiten hacer cálculos con tiempo. Una lista de estas funciones se puede ver abriendo al asistente de funciones y seleccionando la categoría Fecha y hora



Sin embargo, hay otras funciones para este tipo de cálculos que están a nuestra disposición sólo si hemos activado el Analysis ToolPak.
Una de estas funciones es FRAC.AÑO (YEARFRAC en la versión inglesa).
Esta función calcula la fracción de año que representa el número de días enteros entre la fecha inicial, el primer argumento de la función, y la fecha final, el segundo argumento.
Existe un tercer argumento, base. Este argumento determina sobre que base se efectuará el cálculo.
Supongamos que en la celda A1 tenemos el valor de fecha 01/01/2008 y en la celda A2 01/07/2008. La fracción de días transcurridos es obviamente 1/2 (o 0.5). Sin embargo veremos que dependiendo de la base escogida obtendremos distintos resultados:

=FRAC.AÑO(A1,A2) = 0.5

En esta fórmula hemos omitido el argumento "base", por lo que Excel supone que la base es 30/360.

=FRAC.AÑO(A1,A2,1) = 0.4972677

Usar uno como base es interpretado con "real/real", es decir, el número real de días transcurridos dividido por el número real de días del año en cuestión. En nuestro ejemplo 182/366 (2008 es bisiesto!).

=FRAC.AÑO(A1,A2,2) = 0.505555

La base 2 es "real/360", es decir, la cantidad de días realmente transcurridos (182) dividido por un año estándar de 360 días (cosa de gringos!).

=FRAC.AÑO(A1,A2,3) = 0.4986301

La base es como la anterior pero dividida por un año de 365 días (a pesar que 2008 tiene 366, como ya hemos señalado).

=FRAC.AÑO(A1,A2,4) = 0.5

La base 4 calcula de acuerdo a 30/360 (europea), es decir meses de 30 días y año de 360.



Technorati Tags:

martes, agosto 12, 2008

Autofiltro - comandos personalizados

Si utilizan con cierta frecuencia Autofiltro para analizar datos de una tabla en Excel, seguramente sabrán apreciar esta sugerencia.
Para activar Autofiltro lo que hacemos normalmente es abrir el menú Datos-Filtro-Autofiltro



Si quisiéramos filtrar la lista para ver sólo los clientes de la Argentina, pulsamos la fecha del campo (Country, en nuestro ejemplo) y marcamos "Argentina"



Contemos la cantidad de operaciones que hemos efectuado:
1 - Clic al menú Datos
2 - Clic al menú Filtro
3 - Clic al menú Autofiltro
4 - Clic a la flecha del filtro en el campo Country
5 - Clic a la opción "Argentina".

En total cinco operaciones. Todo esto se puede hacer en un solo clic, si instalamos previamente el comando Autofiltro en alguna de la barras de herramientas.

Para instalar el comando, abrimos el menú Herramientas-Personalizar (o clic con el botón derecho del Mouse apuntando al área de las barras de herramientas)



En la pestaña Categorías del diálogo Personalizar, elegimos la categoría Datos; en la ventanilla Comandos seleccionamos Autofiltro



y lo arrastramos a alguna de las barras de herramientas



Una vez instalado, el comando quedará a nuestra disposición cada vez que usemos Excel.

Volviendo a nuestro ejemplo, en el cual hemos quitado el Autofiltro, seleccionamos la celda A13 que contiene el valor "Argentina" (el criterio con el cual queremos filtrar la lista).



Todo lo que tenemos que hacer es pulsar una vez el icono de Autofiltro. Excel activa
el autofiltro y realiza el filtrado de acuerdo al valor de la celda activa



Lo que antes hicimos con cinco operaciones. Hemos hecho ahora con un único clic.

Como podrán notar, he agregado otro comando muy útil, "Mostrar todo". Un clic a este comando elimina todos los filtros de la lista.




Technorati Tags:

lunes, agosto 11, 2008

Consolidación de datos de distintos cuadernos.

En el pasado hemos mostrado cómo consolidar datos de distintas hojas de un cuaderno usando Datos-Consolidar, Tablas Dinámicas, y MS Query.
Naturalmente se presentan situaciones en las cuales queremos consolidar datos que se encuentran en hojas de distintos cuadernos.
En esta nota veremos algunas de las técnicas posibles. Supongamos estos dos cuadernos con datos de ventas del primer trimestre de una cadena de tiendas, un cuaderno para el año 2007 (2007.xls) y el otro para el 2008 (2008.xls).

Técnica #1 - transferir los datos a un único cuaderno.
La ventaja de esta técnica es que nos permite usar con facilidad Datos-Consolidar o Tablas Dinámicas. Podemos, por ejemplo, crear un nuevo cuaderno y transferir a él los datos en hojas separadas o en una única hoja. Por ejemplo, creamos el cuaderno "Consolidado" y pasamos a él las hojas de los cuadernos 2007 y 2008




Cambiamos el nombre de las hojas transferidas a "2007" y "2008"



Todo lo que nos queda por hacer es crear una hoja consolidada con Datos-Consolidar



Alternativamente podemos usar tablas dinámicas con rangos de consolidación múltiples



Técnica #2 - Datos en cuadernos separados
Usando Datos-Consolidar.
Como en el caso anterior, empezamos creando un cuaderno donde consolidaremos los datos (Consolidado.xls).
Una vez creado el cuaderno abrimos el menú datos consolidar y creamos la referencia al rango relevante en el cuaderno 2007.xls



Apretamos "agregar". Ahora veremos que Excel no nos permite crear una referencia al rango relevante en el cuaderno 2008.xls. Lo que haremos será crear la referencia manualmente



Sencillamente tecleamos la referencia manualmente, cambiando 2007 por 2008 y extendiendo el rango a D8.

Pulsamos "Aceptar" y Excel consolidará los datos.



Usando Tablas dinámicas.
También aquí usamos rangos de consolidación múltiples, creando referencias a las hojas relevantes de los distintos cuadernos. A diferencia de Datos-Consolidar, creamos las referencias directamente apuntando a los rangos en las hojas de los distintos cuadernos



El resultado es




Technorati Tags:

lunes, agosto 04, 2008

Listas desplegables dependientes múltiples

En la nota anterior sobre listas desplegables dependientes mostramos cómo crearlas con validación de datos.
En esa nota vimos como crear una lista desplegable de países y ciudades. Una vez elegido el país, la segunda lista desplegable mostraba sólo ciudades de ese país.
Algunos lectores me consultan como hacer lo mismo pero con más de dos niveles de dependencia. Por ejemplo, continentes-países-ciudades.
La técnica es básicamente la misma. Incluimos las listas en rangos nominados (dentro de nombres, usando Insertar-Nombres-Definir) y luego usamos validación de datos con la opción Lista y en Origen usamos fórmulas con la función INDIRECTO.
Supongamos este cuaderno con cuatro hojas



En la hoja Continentes tenemos una lista de los continentes

listas desplegables dependientes

Estos valores nos servirán como referencia a los nombres que contendrán la lista de países de cada continente. Definimos el rango A1:A7 dentro del nombre "continente"

continente=Continentes!$A$1:$A$7

En la hoja Países creamos campos con las listas de los países de cada continente. Por comodidad (la mía) he puesto sólo dos países por continente



Finalmente ponemos listas de las ciudades por países en la hoja Ciudades

listas desplegables dependientes


Ahora tenemos que definir los nombres. Una forma de ahorrar tiempo es usar el método Insertar-Nombre-Crear. En la hoja Países seleccionamos la celda A1 y abrimos el menú Insertar-Nombre-Crear



Como queremos que Excel use la fila superior como rótulo para los nombres, señalamos la opción "crear nombres en fila superior".

El resultado será:

África=Paises!$A$2:$A$3
América_del_Norte=Paises!$B$2:$B$3
América_Central=Paises!$C$2:$C$3
América_del_Sur=Paises!$D$2:$D$3
Asia=Paises!$E$2:$E$3
Europa =Paises!$F$2:$F$3
Oceanía=Paises!$G$2:$G$3
Como verán Excel ha agregado "_" en los casos que el nombre del continente está formado por más de una palabra. Esto se debe a que por definición los nombres en Excel no pueden tener espacios en blanco (ni símbolos especiales).

Usamos el mismo método para definir los nombres en la hoja Ciudades, con este resultado

Congo =Ciudades!$A$2:$A$61
Canadá =Ciudades!$B$2:$B$61
México=Ciudades!$C$2:$C$61
Venezuela=Ciudades!$D$2:$D$61
China=Ciudades!$E$2:$E$61
Alemania=Ciudades!$F$2:$F$61
Australia=Ciudades!$G$2:$G$61
Angola =Ciudades!$H$2:$H$61
Estados_Unidos=Ciudades!$I$2:$I$61
Guatemala=Ciudades!$J$2:$J$61
Colombia=Ciudades!$K$2:$K$61
Vietnam=Ciudades!$L$2:$L$61
Francia =Ciudades!$M$2:$M$61
Islas_Fidji=Ciudades!$N$2:$N$61

Como ven, todos los nombres tiene el mismo tamaño de rango (de la fila 2 a la 61), lo que hará que en la lista desplegable aparezcan espacios en blanco. Más adelante veremos como solucionar este problema.

Ahora que hemos definido todos los nombres, definimos las listas desplegables en la hoja "Elección"

En la celda B1 definimos la lista con la opción Lista y la fórmula "=continente". Esto crea una referencia al rango que contiene los nombres de los continentes

listas desplegables dependientes

En la celda B2 creamos la lista de países que será dependiente del continente elegido en la celda B1



En este caso creamos la referencia al rango usando la función INDIRECTO. Además tenemos que usar la función SUSTITUIR para poner las líneas "_" en lugar de los espacios entre las palabras, para que el valor de la celda coincida con el nombre del rango

=INDIRECTO(SUSTITUIR(B1," ","_"))

Usamos la misma técnica en la celda B3, usando como referencia el valor de la celda B2

listas desplegables dependientes

Si elegimos el continente América del Sur, podremos elegir sólo Venezuela o Colombia. Si elegimos Colombia podremos elegir una de las ciudades que hemos incluido en la columna Colombia de la hoja Ciudades



Si fuera necesario podríamos agregar más listas dependientes creando los campos adecuados (barrios, jurisdicciones, etc.).

La técnica que hemos mostrado adolece de un defecto estético, los espacios en blanco. Para solucionar este problema tenemos que usar rangos dinámicos. Normalmente usamos la función DESREF para crear rangos dinámicos. El problema en nuestro caso es que la función INDIRECTO solo acepta rangos como argumento.
Para superar este problema usaremos esta fórmula en la creación de la lista desplegable dependiente de la celda B3 (ciudades)

=DESREF(INDIRECTO(SUSTITUIR(B2," ","_")),0,0,CONTARA(INDIRECTO(SUSTITUIR(B2," ","_"))),1)

listas desplegables dependientes

Ahora la lista dependientes de ciudades no mostrará espacios en blanco.



La fórmula fue tomada del excelente sitio Contextures de Debra Dalgleish.

El cuaderno con el ejemplo y las fórmulas puede descargarse aquí.

Todo sobre listas desplegables en Excel, técnicas avanzadas y descarga gratuita de ejemplos  en la Caja de Herramientas Excel - Listas Desplegables de JLD. Ver la nota o ir a la página de descarga de la guía.

sábado, agosto 02, 2008

Ultimo valor en el rango (fila o columna)

En la nota sobre hipervínculos describimos una fórmula para obtener la dirección de la última celda en la columna que contiene un valor.
La fórmula en cuestión nos da la dirección de la última celda no vacía a condición que todos los valores del rango, o por lo menos el de la última celda, sean texto.
Por supuesto hay casos en que los valores en el rango son numéricos, en otros casos son sólo texto y también hay casos en que hay valores de ambos tipos.
Supongamos estos dos rangos de valores



La fórmula que nos dará la dirección de la última celda en la columna que contiene un valor de tipo texto es

=DIRECCION(COINCIDIR("*",A:A,-1),1)



El problema con esta fórmula es que si en una celda aparece el símbolo * como texto, dará como resultado la dirección de esa celda. Podemos reemplazar esa fórmula por ésta

=DIRECCION(COINCIDIR(REPETIR("z",250),A:A),1)



Hemos reemplazado el valor de la celda A4 por "*". Usando la primer fórmula (en la celda D3) obtenemos el resultado $A$4, que es incorrecto. Con nuestra nueva fórmula obtenemos el resultado correcto (en la celda D4).

Si el rango a evaluar contiene sólo valores numéricos, como en la columna B, usamos esta fórmula

=DIRECCION(COINCIDIR(9.99999999999999E+307,B:B),2)



La expresión 9.99999999999999E+307 es el mayor número que Excel puede considerar.

Para obtener el valor de la última celda podemos usar la función INDIRECTO usando como referencia la celda que contiene la dirección o anidando la fórmula dentro de INDIRECTO. Por ejemplo =INDIRECTO(D3) dará como resultado "Laura"



También podemos usar las funciones anidadas en una única fórmula

=INDIRECTO(DIRECCION(COINCIDIR("*",A:A,-1),1))

Y en el caso de la columna B con valores numéricos

=INDIRECTO(DIRECCION(COINCIDIR(9.99999999999999E+307,B:B),2))

Para encontrar la dirección de la última celda en un rango mixto (valores numéricos y texto) podemos usar esta fórmula matricial

={MAX((FILA(A1:A65535)*(A1:A65535<>"")))}

o esta que es la misma pero con SUMAPRODUCTO

=DIRECCION(SUMAPRODUCTO(MAX((FILA(A1:A65535)*(A1:A65535<>"")))),1)

La expresión (A1:A65535<>"") crea una matriz de valores VERDADERO o FALSO.
La expresión crea una matriz con el número de fila. Al multiplicar los vectores, el número de fila de toda celda vacía será 0. Por lo tanto la función MAX nos dará el número de fila de la última celda no vacía.

Otro tipo de solución es utilizar funciones definidas por el usuario (UDF) como las que publicó John Walkenbach hace ya mucho tiempo.

ultima celdaAquí pueden descargar el cuaderno con las funciones y las macros.





Technorati Tags:

Hipervínculos en Excel

Excel permite crear hipervínculos con facilidad. Todo lo que tenemos que hace es seleccionar una celda y pulsar Ctrl+Alt+K,




o usar el menú contextual pulsando el botón derecho del Mouse sobre la celda



o usar el menú Insertar-Hipervínculo



En este caso



creamos un vínculo a la celda A1 de la hoja Lista en nuestro cuaderno.

De la misma manera podemos crear vínculos a celdas en otras hojas del cuaderno, celdas en hojas de cuadernos remotos y también a páginas en la WEB.



Al señalar la celda con un hipervínculo, podemos ver la información de pantalla, dato que podemos modificar en el diálogo de creación del hipervínculo.

Además podemos agregar hipervínculos no sólo a celdas sino también a otros objetos como gráficos o imágenes, por ejemplo.

Otra forma de crear un hipervínculo es usar la función HIPERVINCULO. Por ejemplo, podemos crear el mismo hipervínculo como en la celda A1, usando el asistente de funciones


Sin embargo al referirse a un rango en una hoja del cuaderno, la función no funcionará





Para solucionar este problema usamos el símbolo # combinado con el nombre de la hoja y la referencia a la celda, en forma de texto, como argumento de la función
=HIPERVINCULO("#Clientes!A1","Pasar a la hoja Clientes)



La ventaja de usar la función en lugar del menú, es que podemos crear vínculos dinámicos.

En esta nota nos referiremos sólo a vínculos dentro del cuaderno activo.

Por ejemplo, supongamos que tenemos un cuaderno con varias hojas, una de ellas llamada "Clientes" y otra llamada "Proveedores".
En lugar de crear dos hipervínculos, uno a cada hoja, podemos crear una estableciendo la hoja a la que queremos pasar en forma dinámica.
Por ejemplo, en la celda A1 creamos una lista desplegable (usando el menú Validación de Datos) con los nombres de las hojas del cuaderno



En la celda C1 ponemos está fórmula con la función HIPERVINCULO

=HIPERVINCULO("#"&A1&"!A1","Pasar a la hoja "&A1)

Como ven, usamos el valor de la celda A1 también para crear la referencia a la hoja y también para crear el nombre descriptivo



Tanto la referencia como el nombre descriptivo cambian de acuerdo a la selección en la celda A1.

Hasta aquí hemos creado hipervínculos que nos llevan a la celda A1 de la hoja buscada. Ahora supongamos que queremos que el vínculo nos lleve automáticamente a la primer celda vacía de una determinada columna.
En la hoja Clientes tenemos una lista de clientes y sus direcciones. Queremos que el hipervínculo nos lleve, en nuestro ejemplo, a la celda A9 de la hoja Clientes



Dado que la columna A de la hoja Clientes contiene valores de texto, podemos usar esta fórmula para encontrar la dirección de la primer celda vacía

=DIRECCION(COINCIDIR("*",Clientes!A:A,-1)+1,1)

En esta fórmula estamos suponiendo que el símbolo * no aparece como texto en ninguna de las celdas del rango de búsqueda.
Ponemos esta fórmula en la celda B1 y la usamos como referencia en la función HIPERVINCULO



En lugar de usar una celda auxiliar, podemos incluir la fórmula de la celda B1 como argumento en la función HIPERVINCULO

=HIPERVINCULO("#"&A1&"!"&DIRECCION(COINCIDIR("*",Clientes!A:A,-1)+1,1),"Pasar a la hoja "&A1)

Finalmente podemos dar un paso más adelante y vincular dinámicamente también la búsqueda de la primer celda libre en función del valor de la celda A1

=HIPERVINCULO("#"&A1&"!"&DIRECCION(COINCIDIR("*",INDIRECTO(A1&"!A:A"),-1)+1,1),"Pasar a la hoja "&A1)
Aquí tenemos que usar la función INDIRECTO para que Excel considere el valor de la celda A1 en la función COINCIDIR.



El archivo con la fórmula se puede descargar aquí





Technorati Tags: