2009-09-15 7 views
2

J'ai été chargé de compter le nombre de chaînes distinctes dans une colonne dans Excel. Une recherche rapide sur Google a donné plus tard la formule suivante trouvée here:Comptage de valeurs distinctes dans la fonction de fréquence Excel

= SOMME (SI (FRÉQUENCE (MATCH (B2: B10, B2: B10,0), MATCH (B2: B10, B2: B10,0))> 0,1))

tenir compte des données:

A B C D A B E C

maintenant, la fonction de correspondance pourrait renvoyer un tableau (comme premier argument est un tableau):

Jusqu'à présent, si bon. Ce que je ne comprends pas, c'est comment la fonction FREQUENCE fonctionne ici, en particulier comment elle traite les bins qui sont répliqués (par exemple le bin 1 est répliqué dans les données ci-dessus). Le résultat de la fonction de fréquence est la suivante:

Merci

Taras

Répondre

2

EDIT: Je compris comment votre solution fonctionnait - modifiée pour refléter cela. FREQUENCE recherche les entrées de vos corbeilles dans le tableau de recherche. Voici comment cela fonctionne:

tableau de recherche: 1 2 3 4 1 2 7 3

Bins: 1 2 3 4 1 2 7 3

Bin 1 => il y a deux 1 => 2

Bin 2 => il existe deux 2 s => 2

Bin 3 => il y a deux de 3 => 2

Bin 4 => il y a une 4 => 1

Bin 1 répétée => 1 déjà compté => 0

Bin 2 répété => 2 déjà compté => 0

Bin 7 => il y a une 7 => 1

Bin 3 répété => 3 déjà compté => 0

il semble presque que la solution exploite une bizarrerie FREQUENCE, qui est, il ne comptera pas le même bac deux fois, parce que vous pourrait attendre le second bac avec la valeur 1 à être non nul aussi.Mais c'est comme cela que ça fonctionne - comme il ne comptera que le nombre d'occurrences pour la première case et non une case dupliquée, le nombre de lignes avec une valeur supérieure à zéro vous donnera le nombre d'entrées distinctes.

Voici une approche alternative que vous pourriez trouver utile. il peut être utilisé pour calculer le nombre de valeurs distinctes:

Supposons que votre plage de chaînes est B2: B10. Remplissez dans une autre colonne

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

La ligne devrait changer en cours de copie vers le bas, de sorte que la deuxième rangée doit être, par exemple:

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

Ce signale TRUE si la ligne actuelle contient la première instance d'une chaîne de caractères (si vous lui donnez quelques minutes, vous devriez être capable de comprendre ce qu'il fait). Par conséquent, si vous comptez le nombre de TRUE avec COUNTIF() alors vous devriez obtenir le nombre de chaînes distinctes.

+0

C'est ce que je pensais que faisait la fonction de fréquence, en ignorant effectivement les corbeilles en double. J'espérais que quelqu'un pourrait dire avec certitude que c'est le comportement documenté de la fonction, mais il semble que ce soit une bizarrerie bien connue. Merci d'avoir répondu! – Taras

0

Vous pouvez utiliser une routine 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 vous avez besoin pour afficher les résultats uniques, vous pouvez juste boucle à travers la collecte et écrire les valeurs de votre feuille de calcul.

+0

Hey Dendarii, Je demandais en fait comment fonctionnait la fonction de fréquence ... votre routine est appréciée! – Taras

+0

Vous avez raison! On dirait que Joel a donné la réponse à votre question réelle :) – dendarii