2012-10-08 6 views
7

J'ai regardé autour de ce site et en ligne pour une réponse à cette question, mais je n'ai pas encore réussi, donc je vais demander dans un nouveau fil.Comment compter des valeurs uniques par catégorie dans Excel

Je dois être en mesure de compter le nombre d'occurrences d'un texte particulier par catégorie dans Excel en utilisant une formule (ou un certain nombre de formules). De préférence, cela peut être fait sans l'utilisation de VBA, mais si cela est nécessaire, je vais essayer d'écrire une commande VBA.

Voici ce que je travaille avec:

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

Je voudrais avoir une formule qui compte le nombre d'occurrences uniques de chaque mot par catégorie. Les catégories sont connues et finies, et sont incluses dans une liste dans ma feuille Excel, mais les mots peuvent être n'importe quel montant et ne sont pas connus. Chaque catégorie peut avoir des mots que d'autres catégories auraient ainsi le résultat final devrait ressembler à ceci:

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

Enfin, je sais que je peux dédupliquer la liste, mais je voudrais garder la liste intacte pour l'archivage fins, donc un compte qui ne nécessite pas de dédoublement serait idéal.

Voici ce que j'ai essayé de le faire, mais ne travaille pas à la fin:

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

Merci beaucoup pour votre aide!

+0

Avez-vous cherché des formules pour compter des valeurs uniques (http://office.microsoft.com/fr-fr/excel-help/count-occurrences-of-values-or-unique-values-in-a-data -range-HP003056118.aspx) –

Répondre

2

Essayez cette "formule tableau"

=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))

confirmé avec CTRL+SHIFT+ENTER

Où C1 est la première catégorie à compter pour. Copier formule vers le bas pour toutes les catégories

Explication

L'idée de base de la formule est que la première IF est un « filtre » pour vous assurer que vous ne regardez les valeurs B si une valeur = C1, la deuxième IF filtre les ébauches en B, sinon le MATCH donne la position de la première partie de cette valeur dans B (ce qui donne le même numéro pour les mêmes valeurs)

le résultat de l'IFs est la première partie de FREQUENCY fonction. Les "bacs" dans FREQUENCY sont formés par la partie ROW-ROW + 1 qui vous donne une gamme de nombres 1 à n qui englobera toute la gamme de valeurs que MATCH pourrait donner.

Maintenant nous avons juste besoin de compter le nombre de nombres différents retournés par le IF s (car cela sera égal au nombre de différentes valeurs dans B pour votre critère), ainsi le 1 final dans la formule est assigné à chaque valeur non nulle dans FREQUENCY et le résultat est additionné.

en détail pour votre exemple où C1 = A cette partie

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

résultats dans ce tableau

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

valeurs FAUX où col A <> "A" sinon le nombre de MATCH donnant la position du premier correspondant pour chaque valeur - l'avis 2 apparaît deux fois parce que foo apparaît deux fois, d'abord dans la rangée 2

et la partie ROW(B$1:B$11)-ROW(B$1)+1 vous donne ce tableau

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

maintenant la formule ressemble à ceci

=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))

Alors FREQUENCY met les valeurs dans le premier tableau dans le pertinent " poubelles "et la formule résout maintenant à ceci

Notez que le tableau retourné par FREQUENCY somme à 6 (six lignes avec la valeur "A") mais il n'y a que 5 nombres différents de zéro, indiquant les cinq valeurs différentes pour le critère "A".

Maintenant le dernier IF retourne un 1 pour chaque valeur non nulle et SUM fonction résume ceux pour obtenir 5

+0

Cela a fonctionné!Je vais regarder la formule que vous m'avez donnée avec soin et poser des questions si je ne comprends pas quelque chose; J'aimerais pouvoir utiliser ces formules moi-même. Merci beaucoup! – Luchadeer

+0

Cela pourrait être un peu beaucoup à demander, mais pourriez-vous expliquer brièvement ce que vous avez fait là-bas? Je sais que le second 'IF' regarde si oui ou non la valeur est' C1', alors il reurns cette valeur seulement si aucune de ces rowns n'est vide ('IF (B $ 1: B $ 11 <>" ", ...') Cependant, je suis confus au sujet de ce que les fonctions de 'ROW 'font ici.Maintenant, merci beaucoup, cela a fonctionné – Luchadeer

+0

J'ai posté une explication dans ma réponse ..... –

4

Personnellement, je préfère le faire en utilisant Pivot Tables. Pour tout ce qui dépasse une feuille de calcul occasionnelle, les requêtes SQL dans Microsoft Access ou d'autres bases de données gagnent le jeu.

2

Je me suis cassé la tête à ce sujet aussi. La solution la plus simple que j'ai trouvée est une combinaison d'un tableau croisé dynamique et d'une formule unique.

  1. Créer un tableau croisé dynamique
  2. Put Cat. dans la colonne des étiquettes
  3. Mettre Word dans la rangée des étiquettes
  4. mettre le mot dans les valeurs
  5. formule de comptage d'utilisation dans une cellule B2 avec la gamme B5:B100000 et soustraire 1 (pour les totaux en dessous de la table de pivot:

    =COUNT(B5:B100000)-1

Comment facile est ce?

1

Manière simple - il suffit de sélectionner l'option Modèle de données lors de l'insertion de Pivot et de sélectionner l'option de valeur distincte dans le champ de valeur. Vous avez terminé.

Questions connexes