¿Cómo contar valores únicos en un rango de celdas de Excel 2002 si se cumple una condición en otro rango de celdas diferente?

En la columna A tengo el campo mes y en la columna B tengo una serie de datos numéricos que se repiten. Deseo contar datos numéricos únicos situados en el rango B: B para un mes dado.

1 Respuesta

Respuesta

Por ejemplo, suponiendo que los datos están en el rango A2:B100 y que el mes del que se quieren obtener los valores únicos es el mes 8:

=SUMA(1*(SI(A2:A100=8;COINCIDIR(B2:B100;B2:B100;0)+1)=FILA(2:100)))

Saludos_

¡Gracias! 

Buenas tardes.

El tema es que el mes lo tiene que leer de un rango de celdas en columna que contiene diferentes meses.

Me temo que no entiendo. Los meses estaban en la columna A, ¿no?

 Sí, los meses están en la columna A. Ejemplo:

A1 = abril, A2 = abril,..., A31 = mayo, A32 = mayo,...

En F1 introduzco el mes que sea, por ejemplo: febrero, y en G1 me calcula los valores únicos que tengo en B:B. Los meses estarán en A:A, pero se repetirá el mismo mes así como días tenga ese mes, cómo has podido observar en mi anterior comentario.

Pues entonces pienso que lo único que hay que hacer es sustituir el 8 en la fórmula que puse en el primer mensaje por la celda donde está el mes que se necesite, en este caso F1:

=SUMA(1*(SI(A2:A100=F1;COINCIDIR(B2:B100;B2:B100;0)+1)=FILA(2:100)))

Obviamente, la fórmula sigue siendo matricial.

¿Qué función tiene =FILA(2:100)? ¿No sería más correcto usar FRECUENCIA en vez de COINCIDIR?

Gracias,

Miguel

Creo que quizás sería mejor saber si la fórmula funciona antes de buscarle cambios o de entrar a discutir lo que hace cada función.

Saludos_

La fórmula parece funcionar bien, pero me gustaría saber cómo funciona, si eres tan amable.

El SI hace un cribado previo, dejando sólo las filas cuyo mes corresponde al buscado. De entre las filas que quedan (esto es, las filas correspondientes al mes que se busca), COINCIDIR devuelve el número de la primera fila cuyo valor coincide con el de esa fila. Si dicha primera fila es distinta de la fila procesada, esto significa que ya hay una fila previa con ese mismo mes en la columna A y ese mismo valor en la columna B, con lo que queda descartada. El 1* es para convertir en unos y ceros los VERDADERO y FALSO que se habrán generado al procesar las funciones, y la función SUMA simplemente suma esos unos y devuelve su cuenta.

Saludos._

¡Gracias! 

Agradezco tu tiempo y tu explicación. Acabo de conocer las fórmulas matriciales y me pierdo un poco con su funcionamiento y con su sintaxis. Por ejemplo: no entiendo muy bien el =FILA(), supongo que algo toma el valor de esta función, pero no llego a entender qué, supongo que alguno de los argumentos de SI.

COINCIDIR devuelve el número de fila de la primera aparición de cada valor dentro del mes que se necesita. Como hay que comprobar si dichos números de "primeras apariciones" corresponden o no con cada una de las filas de datos, lo más sencillo es generar una matriz con dichos números de fila. De ahí la función FILA(). El resultado sería el mismo, aunque más laborioso, si se sustituyera FILA() por un literal de matriz: {2;3;4;5;6;...;100}. Además, el uso de FILA() garantiza que si se borran o añaden filas entre medias la fórmula recogerá los cambios, cosa que con el literal de matriz no sucedería.

Saludos_

Como yo voy a ir introduciendo infinidad de entradas en la tabla, necesitaría que los rangos en las fórmulas aparecieran del tipo A:A, en vez de A2:A100 ¿Habría algún problema con esto?

Saludos,

Sí. Las fórmulas matriciales procesan todo lo que se les pasa como argumento, así que si le pasas columnas completas procesarán las más de un millón de celdas de cada columna, haya o no datos en dichas celdas.

Lo que se suele hacer en estos casos es recurrir a uno o más rangos dinámicos, es decir rangos con nombre que ajustan automáticamente sus dimensiones en función de la cantidad de celdas con datos.

Tienen ciertas restricciones. Una de ellas es que en la columna que sirve para contar el número de filas con datos no puede haber ni celdas vacías en la tabla de datos ni celdas no vacías por debajo del final de la tabla.

Además las fórmulas se complican un poco porque hay que hacer referencia a las columnas mediante las funciones INDICE y/o DESREF aplicadas al rango dinámico.

Pienso que es más difícil de explicar que de ver, así que he subido un ejemplo a http://www.jrgc.es/ejemplos/ejemplo_20170424a.xlsx

La fórmula en G1 calcula los valores únicos en la columna B del mes seleccionado en F1. En principio, la fórmula debería seguir trabajando sin problemas si se añaden o eliminan datos de la tabla (columnas A y B), y siempre trabajará sólo con las filas con datos, independientemente de que haya 10 o 10000 (aunque, lógicamente, a más datos más tardará en procesarlos)

Saludos_

He visto que la fórmula inicial fallaba si había el mismo valor para más de un mes, así que la he cambiado. La nueva fórmula está en el libro cuyo enlace puse en mi anterior mensaje.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas