jueves, marzo 08, 2007

Usando Filtro Avanzado en Excel

Autofiltro permite filtrar una lista de acuerdo a una serie de criterios. Por cada columna podemos elegir hasta dos criterios, combinándolos con los operadores Y (AND) u O (OR).
Autofiltro es una gran herramienta para filtrar datos, pero en ciertas ocasiones resulta limitada. En muchos de esos casos podemos utilizar Filtro Avanzado.




En una nota anterior en este blog he mostrado uno de los usos de Filtro Avanzado: extraer una lista de valores únicos.

En esta nota veremos otros usos de Filtro Avanzado. Empecemos por considerar esta lista de nombres con sus respectivas edades



Como pueden ver hemos dejado algunas líneas en blanco por encima de la lista. Esto es necesario para permitir introducir los criterios con los cuales queremos filtrar la lista.

Supongamos que queremos filtrar la lista de manera que vemos todas las personas mayores de 40 años o menores de 30 años. El primer paso consiste en copiar los encabezamientos de las columnas en la fila 1; luego escribimos los criterios en las celdas B2 y B3



Ahora abrimos el menú Datos—Filtro--Filtro Avanzado y señalamos la tabla de datos y el rango que contiene los criterios



Apretamos aceptar y Excel filtrará la lista



Para volver a mostrar todas las líneas usamos el menú Datos—Filtro—Mostrar todo



Al escribir los criterios en distintas líneas estamos indicando a Excel que queremos usar el operador O (OR). Si queremos usar el operador Y (AND) tenemos que poner los criterios en la misma línea. Por ejemplo, si queremos mostrar solo aquellos cuyo nombre empieza con la letra R y son mayores de 30 años






Nótese que usamos R* como criterio.

También podemos combinar operadores Y (AND) y O (OR)






También podemos usar fórmulas como criterio. Para esto deben cumplirse dos condiciones:
1 - que den como resultado un valor VERDADERO o FALSO.
2 – el encabezamiento del rango de criterios debe ser distinto del encabezamiento de la columna de datos

Por ejemplo, queremos mostrar sólo aquellos nombres cuya edad sea menor que la edad promedio de la lista. En el rango de criterios ponemos esta fórmula

=B6<PROMEDIO($B$6:$B$15)






Otro ejemplo sería mostrar aquellos nombres que aparecen más de una vez. Para eso usaremos la fórmula

=CONTAR.SI($A$6:$A$15,A6)>1






Otra gran ventaja de Filtro Avanzado es que nos permite copiar la lista filtrada a otra ubicación en la hoja. Volviendo sobre el ejemplo anterior, marcamos la posibilidad "Copiar a otro lugar", por ejemplo a D1






Como podemos ver, Filtro Avanzado permite filtrar listas de maneras que no serían posibles con Autofiltro.



Technorati Tags:

lunes, marzo 05, 2007

Excluyendo ceros en cálculos con Excel

De acuerdo a Wikipedia, el cero pertenece al conjunto de los números enteros. Sea lo que fuere, en ciertos cálculos, el cero puede ser bastante molesto, en especial si lo hacemos con Excel.

Por ejemplo, supongamos esta lista de números





Si queremos contar cuántos elementos hay en la lista, sin incluir los ceros, podemos hacerlo fácilmente usando la función CONTAR.SI. Definamos un nombre que contenga el rango de números

lista_num: =Hoja1!$A$1:$A$20

la siguiente fórmula nos da como resultado 20: =CONTAR(lista_num)

Si queremos contar la cantidad de números en la lista, sin considerar los ceros, usaremos la fórmula

=CONTAR.SI(lista_num;"<>0")

Esta fórmula da como resultado 17.

Los problemas empiezan cuando queremos encontrar el mínimo de la lista, lo que hacemos usando la función MIN. Esta fórmula da como resultado 0

=MIN(lista_num)

Si queremos encontrar el mínimo de la lista, sin incluir los ceros, usamos esta fórmula

=SI(MIN(lista_num)<>0;MIN(lista_num);K.ESIMO.MENOR(lista_num;CONTAR.SI(lista_num;"=0")+1))

Esta fórmula realiza el cálculo en dos etapas. Primero comprueba si el mínimo es cero. Si no hay ningún cero en la lista, usa la fórmula MIN(lista_num).
Si el mínimo es cero, pasa a usar la segunda parte de la función SI, la función K.ESIMO.MENOR combinado con CONTAR.SI.

La sintaxis de la función K.ESIMO.MENOR es: K.ESIMO.MENOR(matriz;k)
Donde matriz es el conjunto de datos y k determina a partir de qué valor se calculará el mínimo. En nuestra fórmula k es determinado por la fórmula CONTAR.SI(lista_num;"=0")+1 que da como resultado, en nuestro ejemplo, 4.

Un problema similar, simétrico diría, tenemos si nuestra lista está formada sólo por números negativos.
En ese caso, calcular el máximo de la lista (supongamos la misma lista, pero con valores negativos), daría 0. Para calcular el máximo, sin tomar en cuenta los ceros usamos una fórmula similar (al rango le hemos dado el nombre lista_neg)

=SI(MAX(lista_neg)<>0;MAX(lista_neg);K.ESIMO.MAYOR(lista_neg;CONTAR.SI(lista_neg;"=0")+1))

Otro problema con ceros es calcular promedios. Excel ignora las celdas vacías al calcular promedios con la función PROMEDIO. Pero los ceros son tenidos en cuenta. Por ejemplo, la fórmula =PROMEDIO(lista_num) da como resultado 39,25. Pero si calculamos el promedio sin incluir los ceros, obtenemos 46,176.

Para calcular promedios sin tomar en cuenta los ceros tenemos varias posibilidades:

=SUMA(lista_num)/CONTAR.SI(lista_num;"<>0")

El problema con esta fórmula es que toma en cuenta las celdas vacías. Para evitar que esto suceda podemos usar la fórmula

=SUMA(lista_num)/(CONTAR(lista_num)-CONTAR.SI(lista_num;0))

Otra alternativa es usar la función SUMAPRODUCTO de esta manera

=SUMA(lista_num)/SUMAPRODUCTO(--(lista_num<>0))

EL doble signo "--" tiene como función forzar el cálculo de la expresión lista_num<> y en su lugar se puede, sencillamente, multiplicar la expresión por 1

=SUMA(lista_num)/SUMAPRODUCTO((lista_num<>0)*1)


Technorati Tags:

jueves, marzo 01, 2007

Contar condicional de fechas en Excel

Uno de mis lectores me pregunta cómo contar los días en un rango de fechas, excluyendo los domingos (o cualquier otro día de la semana).

En esta nota mostraremos dos formas de hacerlo, con y sin columna auxiliar. Ambas formas se basan en el uso de la función RESIDUO. Así que empezaremos por una pequeña explicación sobre esta función.

La función RESIDUO tiene dos parámetros, número y número divisor. Da como resultado el residuo o resto de la división entre número y el número divisor.

Por ejemplo, el resultado de RESIDUO(3,2) es 1.

Supongamos esta serie de 21 fechas, en la cual aparecen 3 domingos, Queremos una fórmula que nos de cómo resultado la cantidad de días, excluidos los domingos (18)




En la celda B1 escribimos esta fórmula

=RESIDUO(A1,7)

Y la copiamos al resto del rango (B1:B21). Esta fórmula da como resultado 1 si el día de la fecha es domingo.



Ahora podemos usar CONTAR.SI, con el criterio "<>1" (distinto de 1)

La fórmula =CONTAR.SI(B1:B21,"<>1") da como resultado 18.

Podemos usar la misma técnica usando la función DIASEM en lugar de RESIDUO. Si usamos DIASEM hay que tener en cuenta que testa función tiene dos parámetros: "número de serie", que representa la fecha y "tipo" que puede ser
1 - (u omitido): Números del 1 (domingo) al 7 (sábado).
2 - Números del 1 (lunes) al 7 (domingo).
3 - Números del 0 (lunes) al 6 (domingo).

Una solución más elegante, sin usar columnas auxiliares, es usar fórmulas matriciales o, mejor aún, SUMAPRODUCTO.

La fórmula será =SUMAPRODUCTO(--(RESIDUO(A1:A21,7)<>1))

SUMAPRODUCTO genera una matriz de resultados VERDADERO o FALSO; el doble signo "--" fuerza a Excel a transformar VERDADERO en 1 y FALSO en 0. Finalmente SUMAPRODUCTO suma los resultado, en este caso 18.
En la columna B hemos puesto la fórmula

=RESIDUO(A1,7)<>1

Y como puede verse resultan 18 casos de VERDADERO



Obviamente, si queremos excluir otro día, cambiamos el 1 por el número correspondiente.


Technorati Tags: