Pregunta

Me encargaron contar el número de cadenas distintas en una columna en Excel. Más tarde, una búsqueda rápida en Google arrojó la siguiente fórmula encontrada aquí :

= SUMA (SI (FRECUENCIA (PARTIDO (B2: B10, B2: B10,0), PARTIDO (B2: B10, B2: B10,0)) > 0,1))

Considere los datos:

A segundo do re UNA segundo mi C

Ahora, la función de coincidencia devolvería una matriz (ya que el primer argumento es una matriz):

1 2 3 4 4 1 2 7 7 3

Hasta ahora todo bien. Lo que no entiendo es cómo funciona la función FRECUENCIA aquí, en particular cómo trata los contenedores que se replican (por ejemplo, el bin 1 se replica en los datos anteriores). El resultado de la función de frecuencia es:

2 2 2 1 0 0 0 0 1 0 0 0

Gracias

Taras

¿Fue útil?

Solución

EDITAR : me di cuenta de cómo funcionaba su solución, modificada para reflejar esto.

FREQUENCY está buscando entradas de sus bins en la matriz de búsqueda. Así es como funciona:

Matriz de búsqueda: 1 2 3 4 1 2 7 3

Contenedores: 1 2 3 4 1 2 7 3

Bin 1 = > hay dos 1's = > 2

Bin 2 = > hay dos 2's = > 2

Bin 3 = > hay dos 3's = > 2

Bin 4 = > hay un 4 = > 1

Bin 1 repetido = > 1 ya contado = > 0

Bin 2 repetido = > 2 ya contados = > 0

Bin 7 = > hay un 7 = > 1

Bin 3 repetido = > 3 ya contados = > 0

Parece que la solución está explotando un capricho de FRECUENCIA, es decir, no contará el mismo bin dos veces, porque podría esperar que el segundo bin con valor 1 no sea cero también. Pero así es como funciona: como solo contará el número de ocurrencias para el primer bin y no un bin duplicado, el número de filas con un valor mayor que cero le dará el número de entradas distintas.

Aquí hay un enfoque alternativo que puede resultarle útil. se puede usar para calcular el número de valores distintos:

Suponga que su rango de cadena es B2: B10. Rellene en otra columna

=(MATCH(B2,B$2:B2,1)-(ROW(B2)-ROW(B$2)))>0

La fila debe cambiar a medida que copia, por lo que la segunda fila debería ser, por ejemplo:

=(MATCH(B3,B$2:B3,1)-(ROW(B3)-ROW(B$2)))>0

Esto indica VERDADERO si la fila actual contiene la primera instancia de una cadena (si le das un par de minutos, deberías poder resolver lo que está haciendo). Por lo tanto, si cuenta el número de VERDADEROS con COUNTIF (), entonces debería obtener el número de cadenas distintas.

Otros consejos

Podría usar una rutina vba:

Sub Uniques()

    Dim rng As Range
    Dim c As Range
    Dim clnUnique As New Collection

    Set rng = Range("A1:A8")

    On Error Resume Next
    For Each c In rng
        clnUnique.Add c.Value, CStr(c.Value)
    Next c
    On Error GoTo 0

    MsgBox "Number of unique values = " & clnUnique.Count

End Sub

Si necesita mostrar los resultados únicos, puede recorrer la colección y escribir los valores en su hoja de trabajo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top