2012-10-08 42 views
7

He buscado en este sitio y en línea una respuesta a esta pregunta, pero todavía no he tenido éxito, así que le preguntaré en un nuevo hilo.Cómo contar valores únicos por categoría en Excel

Necesito poder contar el número de ocurrencias de un texto en particular por categoría en Excel usando una fórmula (o varias fórmulas). Preferiblemente esto se puede hacer sin el uso de VBA, pero si es necesario intentaré escribir un comando VBA.

Esto es lo que estoy trabajando con:

Cat. Word 
A  doo 
A  foo 
A  foo 
A  loo 
B  loo 
B  goo 
B  loo 
A  roo 
A  lol 
B  rar 
C  goo 
...  ... 

me gustaría tener una fórmula que cuenta el número de ocurrencias únicas de cada palabra por categoría. Las categorías son conocidas y finitas, y están incluidas en una lista dentro de mi hoja de Excel, pero las palabras pueden tener cualquier cantidad y no se conocen. Cada categoría puede tener palabras que otras categorías tendrían así el resultado final debería ser algo como esto:

Cat. Count of distinct ocurrences per category 
A  5 
B  3 
C  1 

Por último, sé que puedo deduplicar la lista, pero me gustaría mantener la lista intacta para su archivo propósitos, por lo que un recuento que no requiera deduping sería ideal.

Esto es lo que he intentado hacer, pero no funcionó en el final:

=IF(A:A=C1,SUM(IF(FREQUENCY(MATCH(B1:B11,B1:B11,0),MATCH(B1:B11,B1:B11,0))>0,1))) 

muchas gracias por su ayuda!

+0

¿Ha buscado fórmulas para contar valores únicos (http://office.microsoft.com/en-us/excel-help/count-occurrences-of-values-or-unique-values-in-a-data -range-HP003056118.aspx) –

Respuesta

2

probar este "fórmula de matriz"

=SUM(IF(FREQUENCY(IF(A$1:A$11=C1,IF(B$1:B$11<>"",MATCH(B$1:B$11,B$1:B$11,0))),ROW(B$1:B$11)-ROW(B$1)+1),1))

confirmado con CTRL+SHIFT+ENTER

donde C1 es la primera categoría que contar para. Copia fórmula hacia abajo para todas las categorías

Explicación

La idea básica de la fórmula es que la primera IF es un "filtro" para asegurarse de que sólo mira a los valores de B si A = valor C1, la segunda IF filtros cabo espacios en blanco de B, de lo contrario el MATCH da la posición de la primera coincidencia para ese valor en B (dando así el mismo número para los mismos valores)

el resultado de la IFs es la primera parte de FREQUENCY función. Los "contenedores" en FREQUENCY están formados por la parte FILA-FILA + 1 que le proporciona un rango de números 1 a n que abarcará todo el rango de valores que MATCH podría proporcionar.

Ahora sólo tenemos que contar el número de diferentes números devueltos por los IF s (como que será igual al número de valores diferentes en B para su criterio), por lo que el final 1 en la fórmula se asigna a cada valor distinto de cero en FREQUENCY y el resultado se suma.

En detalle para su ejemplo en el que C1 = A esta parte

=IF(A$1:A$11=C1,IF(B$1:B$11<>"",MATCH(B$1:B$11,B$1:B$11,0)))

resultados de esta matriz

{1;2;2;4;FALSE;FALSE;FALSE;8;9;FALSE;FALSE}

valores falsos donde Col A <> "A" de otra manera los números de MATCH dando la posición de la primera coincidencia para cada valor - aviso 2 aparece dos veces porque foo aparece dos veces, primero en la fila 2

y la parte ROW(B$1:B$11)-ROW(B$1)+1 le da esta matriz

{1;2;3;4;5;6;7;8;9;10;11}

por lo que ahora la fórmula se parece a esto

=SUM(IF(FREQUENCY({1;2;2;4;FALSE;FALSE;FALSE;8;9;FALSE;FALSE},{1;2;3;4;5;6;7;8;9;10;11}),1))

Así FREQUENCY pone los valores de la primera matriz en el correspondiente " bins "y la fórmula ahora resuelve este

=SUM(IF({1;2;0;1;0;0;0;1;1;0;0;0},1))

Tenga en cuenta que la matriz devuelta por FREQUENCY suma 6 (seis filas con el valor "A") pero solo hay 5 números distintos de cero, que denotan los cinco valores diferentes para el criterio "A".

Ahora la última SI devuelve un 1 para cada valor distinto de cero y SUM función resume los 5 para obtener

+0

¡Eso funcionó!Veré la fórmula que me diste con cuidado y haré preguntas si no entiendo algo; Me gustaría poder usar estas fórmulas por mi cuenta. ¡Muchas gracias! – Luchadeer

+0

Esto podría ser mucho pedir, ¿pero podría explicar brevemente qué hizo allí? Sé que el segundo 'IF' ve si el valor es' C1', luego revoca ese valor solo si alguno de esos rowns no está en blanco ('IF (B $ 1: B $ 11 <>" ", ...') Sin embargo, estoy confundido acerca de lo que las funciones 'ROW' están haciendo allí. De cualquier manera, muchas gracias, esto funcionó – Luchadeer

+0

Publiqué una explicación en mi respuesta ..... –

4

Personalmente, prefiero hacer que el uso de Pivot Tables. Para cualquier cosa más grande que una hoja de cálculo ocasional, las consultas SQL en Microsoft Access u otras bases de datos ganan el juego.

2

He estado rompiéndome la cabeza en esto también. La solución más simple que encontré en esto es una combinación de una tabla dinámica y una fórmula única.

  1. Crear una tabla dinámica
  2. gatos, acondicionados. en las etiquetas de la columna
  3. Ponga Palabra en la fila de etiquetas
  4. poner la palabra en los valores
  5. fórmula Uso recuento en la celda B2 con la gama de B5:B100000 y restar 1 (para los totales por debajo de la tabla dinámica:

    =COUNT(B5:B100000)-1

¿Qué tan fácil es esto?

1

Modo fácil: solo seleccione la opción Modelo de datos al insertar Pivote y seleccione la opción de valor distinto del campo de valor. Estás listo.

Cuestiones relacionadas