viernes, octubre 27, 2006

Función JERARQUIA en Excel - Rangos continuos

En la nota sobre la función JERARQUIA vimos que esta función asigna la misma posición relativa a valores duplicados en el rango que estamos considerando. La presencia de números duplicados afecta la jerarquía de los números subsiguientes. Por ejemplo, en una lista de números enteros, si un número aparece dos veces y tiene una jerarquía de 5, entonces el número siguiente en tamaño tendrá una jerarquía de 7 y ningún número en la lista tendrá la jerarquía 6.
En esa nota vimos una técnica para lograr que cada valor en la lista tenga un número de jerarquía único.

Uno de mis lectores me hace la siguiente pregunta:

Tenemos valores con sus jerarquías así:
valorjerarquía
55
74
101
101
83


¿No hay manera de que en efecto, los dos valores de 10 tengan la jerarquía de 1 pero el 8 tenga jerarquía de 2, el 7 tenga jerarquía de 3 y el 5 tenga jerarquía de 4?
En otras palabras, lograr un rango continuo de orden de jerarquía.

En esta nota veremos como hacerlo, pero primero daremos un repaso al tema de la
rank_contfunción JERARQUIA.

Supongamos esta lista de valores




A los valores duplicados les hemos puesto un fondo de color de acuerdo al orden de aparición, para poder distinguirlos cuando ordenemos la lista de acuerdo al orden de jerarquía.

Aplicamos la fórmula =JERARQUIA(A2, $A$2:$A$11) a la celda B2 y la copiamos al resto del rango (hasta la celda B11)



En el rango E1:F11 mostramos la misma lista ordenada de acuerdo al resultado de JERARQUIA.
Podemos ver que los dos valores 7 reciben el mismo número de posición (2) y que no existe el número de posición 3. Lo mismo sucede con el valor 2 de la lista que también aparece dos veces.

Si queremos que cada valor en la lista reciba un orden de jerarquía único, aplicamos la fórmula

=JERARQUIA(A2, $A$2:$A$11)+CONTAR.SI($A2:A$11,A2)-1




Si queremos revertir el orden de aparición de los duplicados (los de fondo morado aparecerán antes de los de fondo turquesa), usamos la fórmula

=JERARQUIA(A2, $A$2:$A$11)+CONTAR.SI($A$2:$A$11,A2)-CONTAR.SI($A$2:A2,A2)



Si queremos que cada valor muestre su verdadero orden de jerarquía, pero que el rango de jerarquías sea continuo (sin "saltos") creamos primero una tabla corriente con la función JERARQUIA



Luego escribimos esta
fórmula matricial en la celda C2

={SUMA((SI($B$2:$B$11<B2,1/CONTAR.SI($B$2:$B$11,$B$2:$B$11),0)))+1}

y la copiamos a lo largo del rango C2:C11



En la tabla E1:G11 podemos comparar los resultados de usar la función JERARQUIA y la fórmula matricial.

Una explicación sobre la fórmula, analizando el resultado de C2:

1 – La expresión $B$2:$B$11<B2 genera esta matriz

$B$2:$B$11<B2Resultado
9<9FALSO
7<9VERDADERO
1<9VERDADERO
5<9VERDADERO
9<9FALSO
2<9VERDADERO
6<9VERDADERO
7<9VERDADERO
2<9VERDADERO
4<9VERDADERO


2 – La expresión 1/CONTAR.SI($B$2:$B$11,$B$2:$B$11) genera la siguiente matriz

0.5
0.5
1
1
0.5
0.5
1
0.5
0.5
1

El argumento si_es_falso genera una matriz de 0 (cero)

Finalmente sumamos el resultado de la función SI y le agregamos 1. Para la celda C2 el esquema de cálculo es el siguiente:



Referencias a esta nota:
Tushar Metha – Excel




Categorías: Funciones&Formulas_, Manejo de Datos_, Formulas Matriciales_

Technorati Tags:

martes, octubre 24, 2006

Formato Condicional en Excel – Ocultar Datos

A veces queremos ocultar datos de una hoja. La opción más común es usar el menú Formato-Fila-Ocultar (o Formato-Columna-Ocultar).
Esta opción no nos permite aplicar ningún criterio, como podríamos hacer con Autofiltro, por ejemplo.
Pero con
Formato Condicional y un pequeño truco podemos lograr un efecto similar al de Autofiltro, que también es válido para ocultar datos en columnas.

Supongamos que tenemos esta tabla de ventas de tres productos para los años 2002 – 2006.



Usaremos Formato Condicional y Validación de Datos para crear un mecanismo que nos permita decidir que rango de años mostrar.

Primero agregamos una celda con una lista desplegable para elegir el último año del período a mostrar. En la celda B8 agregamos la lista




Ahora usaremos Formato Condicional para hacer "desaparecer" las celdas que estén fuera del período elegido.

Seleccionamos el rango B1:F5 y abrimos el menú de Formato Condicional. Con la celda B1 seleccionada, elegimos la opción "Fórmula" y escribimos ésta =B$1>$B$8



Es importante poner atención al tipo de dirección de las celdas en la fórmula (B$1 es mixta y $B$8 es absoluta).

Luego apretamos el botón Formato y en la pestaña "Fuente" elegimos el color blanco, para que el contenido de la celda se "mimetice" con el fondo de la celda.



En la pestaña "Bordes" apretamos el botón "ninguno"



Finalmente apretamos "Aceptar".

A partir de este momento, si por ejemplo, elegimos el año 2004 en la celda B8, veremos



Los datos siguen estando, pero se han vuelto invisibles al mimetizarse con el fondo de la celda.
Si queremos compartir nuestro cuaderno, es recomendable proteger las celdas para evitar que un usuario desprevenido borre los datos originales.




Categorías: Manejo de Datos_

Technorati Tags:

sábado, octubre 21, 2006

Construir con Excel una tabla con las 10 primeras posiciones.

Uno de mis lectores me consulta como construir con Excel una tabla donde aparezcan los 10 alumnos de un curso que han conseguido el mejor puntaje. El pedido incluye que la tabla se actualice automáticamente a medida que se vayan ingresando nuevos datos.

Para construir este modelo tomaremos en consideración dos elementos:


1 – La función JERARQUIA (RANK en la versión inglesa)


2 – Rangos dinámicos con nombres.

Supongamos esta lista de alumnos con sus notas







Para la posición de cada uno de acuerdo al puntaje usamos la función JERARQUIA (RANK en la versión inglesa). En la celda C2 escribimos la fórmula =JERARQUIA(B2,puntaje) y la copiamos al resto de las celdas.

El argumento "puntaje" en la función es un rango dinámico definido en un nombre. La definición es =DESREF(Hoja1!$B$2,0,0,CONTARA(Hoja1!$B:$B)-1,1).

El objetivo del rango dinámico es permitir que la fórmula se vaya adaptando a medida que agregamos o quitamos alumnos de la lista.

Si observamos el resultado de la fórmula veremos que hay un problema





Ana y Enrique, al tener el mismo puntaje reciben el mismo número de posición. Ambos reciben la posición 10 y el próximo en la lista recibirá la posición 12.
Para solucionar este problema creamos un nuevo campo en la columna D, al que llamamos "posición sin empate", con la fórmula

=JERARQUIA(B2,puntaje)+CONTAR.SI($C$2:C2,C2)-1

Al ordenar la tabla en orden ascendente de "puntaje sin empate"




podemos ver las diferencias entre los resultados de ambas fórmulas.

Ahora podemos crear un cuadro que muestre los primeros diez alumnos del curso




En la columna F ponemos números (constantes) de 1 a 10.

En la columna G usamos la fórmula
=INDICE(alumno,COINCIDIR(F2,posicion_sin_empate,0)),
que usa los nombres

Alumno: =DESREF(Hoja1!$A$2,0,0,CONTARA(Hoja1!$A:$A)-1,1)

Posición_sin_empate: =DESREF(Hoja1!$D$2,0,0,CONTARA(Hoja1!$D:$D)-1,1)

En la columna H usamos, similarmente la fórmula

=INDICE(puntaje,COINCIDIR(F2,posicion_sin_empate,0))

El problema con esta tabla es que "deja afuera" a Enrique y a Pablo que tienen el mismo puntaje que Ana.

Lo que queremos lograr es una tabla que muestre todos los alumnos que comparten las primeras diez posiciones. En nuestro ejemplo hay 12 alumnos con los mejores diez puntajes.

Para solucionar este problema modificamos nuestra tabla y sus fórmulas:




1 – agregamos un campo (número de orden) con la fórmula

=SI(INDICE(posicion,COINCIDIR(FILA()-1,posicion_sin_empate,0))>10,"",FILA()-1)

2 – En la columna K usamos la fórmula

=SI(CELDA("contenido",J2)="","",BUSCARV(L2,alumno_posicion,3,0))

3 - En la columna L usamos la fórmula

=SI(CELDA("contenido",J2)="","",INDICE(alumno,COINCIDIR(FILA()-1,posicion_sin_empate,0)))

4 - En la columna M usamos la fórmula

=SI(CELDA("contenido",J2)="","",BUSCARV(L2,alumno_puntaje,2,0))

Todas estas fórmulas usan una función SI para condicionar el resultado. Si el valor en el campo "número de orden" nos es "blanco" las fórmulas darán el resultado buscado; en caso contrario el resultado es "blanco".

El número de líneas de esta tabla debe coincidir con el número de alumnos en el curso.

Estas fórmulas usan función CELDA que es volátil y también funciones de búsqueda INDICE, COINCIDIR y BUSCARV, con búsqueda exacta. En hojas con un gran número de alumnos esto puede causar que la recalculación sea lenta.

Una alternativa para esos casos es utilizar Tablas Dinámicas. Los pasos a dar son los siguientes:

1 – definimos un rango dinámico rango_

td: =DESREF(Hoja1!$A$1,0,0,CONTARA(Hoja1!$A:$A),4)
para que nuestra tabla dinámica se adpate a los cambios en la lista de alumnos

2 – Ponemos el campo Alumnos en el área de filas; en el área de datos ponemos Posición y Puntaje.

3 - Abrimos el menú de configuración de campo




y apretamos el botón Avanzado

4 - en el diálogo de avanzado definimos Opciones de Autoordenar: ascendente; activamos la opción de mostrar los 10 valores inferiores; en ambas ventanillas de "Usar campo" elegimos "posición"




El resultado es



La ventaja de usar tablas dinámicas es que nos exime de escribir fórmulas complicadas y los cálculos son mucho más eficientes en términos de tiempo; la desventaja es que las posibilidades de formato son menores que en tablas normales de Excel.





Categorías: Funciones&Formulas_, Manejo de Datos_

Technorati Tags:

miércoles, octubre 18, 2006

Tablas Dinámicas en Excel – Gráficos

Excel nos permite crear un gráfico basado en una tabla dinámica con un solo clic. En nuestro ejemplo



Apretamos el icono de gráficos en la barra de herramientas de tablas dinámicas y obtenemos un gráfico en una nueva hoja



Si queremos presentar el gráfico en la misma hoja de la tabla dinámica, cambiamos su ubicación (clic en el botón derecho del mouse) a la hoja de la tabla






El gráfico esta ligado a la tabla dinámica de manera que todo cambio en la tabla afecta inmediatamente al gráfico, y viceversa. Como se puede ver, en el gráfico aparecen los mismos botones de campos que aparecen en la tabla.
Por ejemplo, si cambiamos la selección de departamentos en el gráfico para mostrar sólo los departamentos 1 y 2




al apretar Aceptar veremos los cambios también en la tabla dinámica



Los gráficos basados en tablas dinámicas son menos flexibles que los gráficos basados en tablas de datos corrientes de Excel. Si cambiamos formatos en el gráfico original (por ejemplo el color de una serie), al actualizar la tabla volverán a aparecer los formatos originales. Otra limitación es que ciertos tipos de gráficos no son permitidos. Si intentan convertir el gráfico a uno del tipo XY recibirán esta advertencia



Tampoco podemos crear un gráfico usando sólo parte de las celdas en la tabla dinámica. Aún cuando seleccionemos sólo un rango de la tabla, Excel generará un gráfico basado en todos los datos presentes en la tabla dinámica.

Para sobreponernos a estas limitaciones lo que tenemos que hacer, básicamente, es quebrar el vínculo entre el gráfico y la tabla dinámica. Esto lo podemos hacer de varias maneras:
1 – Seleccionar la tabla y usar Copiar—Pegado Especial—Valores para copiar los datos en formar estática en alguna otra ubicación. Luego a partir de estos datos generar el gráfico deseado. Si copiamos sólo una parte de la tabla, no hace falta usar Pegado Especial—Valores. También con Pegar (Ctrl+V) obtenemos datos estáticos.

2- Seleccionar toda la tabla, copiar (Ctrl+C) y luego Pegado Especial—Valores.

3 – Copiar el dato seleccionado de una tabla dinámica a un gráfico sin datos creado previamente.




Categorías: Manejo de Datos

Technorati Tags: ,

martes, octubre 17, 2006

Tablas Dinámicas - Función IMPORTARDATOSDINAMICOS (GetPivotData)

Si queremos crear una referencia a una de las celdas de la tabla dinámica fuera de ella, Excel utiliza automáticamente la función IMPORTARDATOSDINAMICOS (GETPIVOTDATA en la versión inglesa).
Por ejemplo, si queremos crear una referencia al total de ventas del 2005 en la celda A12




El objetivo de IMPORTARDATOSDINAMICOS (GetPivotData) es extraer datos de la tabla dinámica, basados en los argumentos de la función, cuya sintaxis es

IMPORTARDATOSDINAMICOS(campo_datos,tabla_dinámica,campo1,elemento1,campo2,elemento2,…)

Por lo general queremos crear la referencia a la celda sin el uso de esta función. Existen dos maneras de hacer esto:

1 - Crear la referencia manualmente, es decir seleccionar A12 y escribir "=B10" en la barra de las fórmulas

2 – Cancelar la opción "generar getpivotdata". Esta opción es poco conocida. Existe un icono en que nos permite activar o desactivar la opción. Para instalar el icono hacemos lo siguiente:

a. Abrimos el menú Herramientas—Personalizar
b. En la pestaña Comandos elegimos Datos. Al final de la lista aparece el icono Generar Getpivodata



c. Arrastramos el icono a alguna de las barras de herramientas (lo más lógico es instalarlo en la barra de Tablas Dinámicas)



Este icono funciona como un interruptor. Con un clic desactivamos la opción y al crear una referencia veremos sólo la dirección de la celda



Un detalle a notar es que referencias directas heredan el formato de la celda de referencia; referencias con Getpivotdata reciben el formato "General".




Categorìas: Manejo de Datos_


Technorati Tags: ,

Tablas Dinámicas en Excel – Manejo de campos y rangos

En las notas anteriores vimos distintas funcionalidades de las tablas dinámicas en Excel:

- agrupar datos
- agregar campos y elementos con fórmulas
- cambiar la presentación de los datos sin fórmulas


Para las funcionalidades que veremos en esta nota hemos ampliado el tablas dinamicas campos y rangosejemplo de la tabla dinámica agregándole datos del período de ventas del año anterior y el campo "Año".

Cuando agregamos líneas o columnas a la base de datos, debemos modificar la información para que los nuevos datos sean incluidos en la tabla dinámica. Para esto activamos el asistente de tablas dinámicas




Apretamos el botón "Atrás"

Seleccionamos el nuevo rango y apretamos "Finalizar"




Como podemos ver, la lista de campos y los datos se han actualizado.



Podemos ahorrarnos estas maniobras si definimos un rango dinámico para la lista de datos desde el principio.


Para presentar una comparación, mes por mes, de los dos años, arrastramos el campo "Año" al área de campos de columna




El total de las filas es innecesario y por lo tanto lo eliminamos quitando la marca de la casilla "Totales de fila" en el diálogo de opciones de tabla




Rehacemos ahora la tabla colocando el campo Año en el área de página, Departamento en el área de filas y Mes en el área de columnas




En esta situación, si agregamos Unidades al área de datos, Excel ubica los nuevos datos en una línea por debajo del campo Ventas



Si queremos que los datos de Ventas y Unidades aparezcan unos al lado de los otros, arrastramos Datos a la zona de columnas, a la izquierda de Mes




Alternativamente podemos arrastrar Mes por debajo de Datos y obtener esta tabla





Categorìas: Manejo de Datos_


Technorati Tags: ,

lunes, octubre 16, 2006

Tablas Dinámicas en Excel – Cálculos sin fórmulas

En la nota sobre campos y elementos calculados investigamos la opción Fórmulas del asistente de Tablas Dinámicas.

En esta entrada veremos otras posibilidades de presentación de datos en las tablas dinámicas de Excel.

Volvamos al ejemplo de las notas anteriores, que hemos adaptado al tema que vamos a tratar



Si queremos presentar las ventas de cada departamento como porcentaje del total hacemos lo siguiente:

1 - Seleccionamos alguna de las celdas de datos de la tabla, abrimos el menú de tablas dinámicas y activamos la opción "configuración de campo"




2 - Pulsamos el botón Opciones, en la ventanilla "Mostrar datos como" elegimos "% de columna" y apretamos aceptar



Excel calcula el porcentaje de cada departamento en forma automática. Si queremos exhibir el campo de las ventas junto con el porcentaje de cada departamento, hacemos lo siguiente:

1 – Agregamos nuevamente el campo de ventas al área de datos



2 - Seleccionamos alguna de las celdas del nuevo campo y volvemos a aplicar el método anterior




Por supuesto, existe también la opción "% de fila". Para dar un ejemplo modificamos la tabla dinámica poniendo el campo Departamento en el campo de columnas




Volvemos sobre el método anterior pero elegimos "% de la fila"



Y obtenemos esta tabla




Finalmente podemos exhibir todos los datos como porcentaje del total, eligiendo la opción "% del Total"



Otras posibilidades son:

Diferencia de




Al elegir esta opción se abre una ventanilla donde debemos elegir el campo y el elemento para realizar la comparación. En nuestro caso queremos comparar ventas de cada mes en relación a enero




El resultado no es de lo más presentable, pero esta opción puede ser muy práctica cuando trabajamos con tablas de gran tamaño.

Otra opción práctica es "Total en" (que en inglés se llama tiene el nombre más apropiado Running Total). Aquí aplicamos la técnica de poner dos veces el mismo campo en el área de datos




Y así obtenemos una tabla con las ventas y con el saldo acumulado por mes






Categorìas: Manejo de Datos_


Technorati Tags: ,