¿Cómo contar el número de valores distintos en un rango?

32

Tengo una tabla grande que ya está organizada con filtros, etc. Me gustaría agregar un resumen debajo de ciertas columnas que contienen el número de valores distintos en esa columna.

No hay función, =COUNTDISTINCT(A2:A100)¿qué puedo hacer en su lugar? (Excel 2003)

No puedo usar exactamente las respuestas a esta pregunta similar porque no quiero modificar la tabla o el filtrado. Necesito una adición en la hoja de trabajo, no una modificación .

Torben Gundtofte-Bruun
fuente

Respuestas:

31
=SUMPRODUCT((A2:A100 <> "")/COUNTIF(A2:A100,A2:A100 & ""))

lo hará sin tener que usar una fórmula de matriz.

Lance Roberts
fuente
44
¿Cómo / por qué funciona esto?
RBarryYoung
44
@RBarryYoung, SUMPRODUCT funciona como una función de matriz sin ser una. Si bien puede hacer mucho más de lo que se está utilizando aquí, aquí solo está comprobando cada instancia de una columna y obteniendo un valor escalado para cada valor distinto en función de cuántas iteraciones hay en la columna. Entonces, si hubiera dos instancias de 'a', agregaría 1/2 y 1/2 para obtener 1. Entonces, por cada valor distinto, agregará uno a la suma.
Lance Roberts el
1
Esta es la parte con la que tengo problemas: " aparece un valor escalado para cada valor distinto en función de cuántas iteraciones hay en la columna " . Si entiendo esto, SUMPRODUCT está ejecutando efectivamente un bucle como for each [i] in A2:A100 DO:{ sum += (([i]<>"")/COUNTIF(A2:A100,[i])) }, derecha ? Tengo problemas para entender cómo se sabe enumerar tanto el parámetro condicional como el segundo parámetro COUNTIF, pero no el primer parámetro COUNTIF. ¿Esta magia DWIM está documentada / explicada en alguna parte por MS? Sería bueno saber cómo escribir esto intencionalmente.
RBarryYoung
1
Sí, lo tienes, itera una matriz para lo que normalmente sería un valor único, multiplicando todos sus parámetros (que en este caso es solo 1), luego agrega las iteraciones. Los SUMPRODUCTOS pueden volverse muy complejos, pero son una de las funciones más útiles en Excel, pueden hacer milagros literales.
Lance Roberts
44
Esto falla si la entrada contiene entradas en blanco. Fijar fácil como hizo una demostración en YouTube es la siguiente: =SUMPRODUCT((A2:A100<>"")/COUNTIF(A2:A100,A2:A100&"")). Asegura que COUNTIFnunca devuelva un 0 para las líneas en blanco, lo que daría como resultado un DIV/0error.
cfi
7

Encontré una solución aquí que parece ser una increíble forma indirecta de resolverlo. Pero bueno, funciona ...

= SUM (IF (COUNTIF (A2: A100, A2: A100) = 0, "", 1 / COUNTIF (A2: A100, A2: A100)))

y luego presione Ctrl+ Shift+ Enter. Presionar solo Enterdará el resultado incorrecto.

Torben Gundtofte-Bruun
fuente
¡Me encantaría ver otras respuestas! ¿Hay una mejor manera que esta para resolverlo?
Torben Gundtofte-Bruun
1
No, esa es la mejor manera. No estoy seguro de por qué hay un IF allí. Puede usar la matriz = SUM (1 / COUNTIF (A2: A100, A2: A100)) ingresada
dkusleika
2
@dkusleika El IF parece estar allí para evitar una división por cero error. Como se mencionó en la página vinculada anteriormente, esto es necesario si el rango contiene celdas en blanco, de lo contrario, puede omitir el IF.
Bavi_H
1

Este artículo muestra esto para valores de texto:

=SUM(IF(FREQUENCY(IF(LEN(C3:C25)>0,MATCH(C3:C25,C3:C25,0),""), IF(LEN(C3:C25)>0,MATCH(C3:C25,C3:C25,0),""))>0,1))

y esto para valores numéricos:

=SUM(IF(FREQUENCY(C3:C25, C3:C25)>0,1))

Este artículo muestra fórmulas similares, pero también muestra un método que usa filtros.

Cuente la cantidad de valores únicos utilizando un filtro

Puede usar el Filtro avanzado para extraer los valores únicos de una columna de datos y pegarlos en una nueva ubicación. Luego puede usar la función FILAS para contar la cantidad de elementos en el nuevo rango.

  1. Asegúrese de que la primera fila de la columna tenga un encabezado de columna.
  2. En el menú Datos, seleccione Filtro y luego haga clic en Filtro avanzado.
  3. En el cuadro de diálogo Filtro avanzado, haga clic en Copiar a otra ubicación.
  4. Si el rango que está contando no está seleccionado, elimine cualquier información en el cuadro Rango de lista y luego haga clic en la columna (o seleccione el rango) que contiene sus datos.
  5. En el cuadro Copiar a, elimine cualquier información en el cuadro o haga clic en el cuadro, y luego haga clic en una columna en blanco donde desea copiar los valores únicos.
  6. Seleccione la casilla de verificación Solo registros únicos y haga clic en Aceptar.

    Los valores únicos del rango seleccionado se copian en la nueva columna.

  7. En la celda en blanco debajo de la última celda del rango, ingrese la función FILAS. Use el rango de valores únicos que acaba de copiar como argumento. Por ejemplo, si el rango de valores únicos es B1: B45, ingrese:
    = ROWS (B1: B45)

Pausado hasta nuevo aviso.
fuente
1

= SUMA (1 / COUNTIF (A2: A100; A2: A100))

Confirme con Ctrl + Shift + Enter

Para cada celda, cuenta cuántas veces ocurre y suma los inversos de todos estos valores. Supongamos que una cadena o número occus 5 veces. Su inverso es 0.2, que se suma 5 veces, por lo que se agrega 1. Al final da el número de valores diferentes.

Nota: ¡no funciona cuando se producen espacios en blanco!

usuario221470
fuente
0

Prueba este enlace. Esto muestra cómo contar valores únicos en una lista que omite celdas en blanco.

http://www.functioninexcel.com/lists-arrays/count-unique-values-in-a-list/

= suma (if (frecuencia (coincidencia (Lista, Lista, 0), coincidencia (Lista, Lista, 0))> 0, 1))

Donde "Lista" es su rango de celdas, por ejemplo:

List = $ A $ 2: $ A $ 12 OR- List = offset ($ A $ 1 ,,, match (rept ("z", 255), $ A: $ A)) -O- List = offset ($ A $ 1, ,, partido (valor (rept ("9", 255)), $ A: $ A))

Charles Hunt
fuente
0

= SUMA (SI (FRECUENCIA (SI (SUBTOTAL (3, DESPLAZAMIENTO (A2: A100, ROW (A2: A100) -ROW (A2), 0,1)), MATCH ("~" y A2: A100, A2: A100 & " ", 0)), ROW (A2: A100) -ROW (A2) +1), 1))

Asegúrese de presionar CONTROL + MAYÚS + ENTRAR después de pegar esta fórmula. Esto es para un rango de A2: A100, ajuste el rango en consecuencia.

Vlada
fuente