2017-07-20 1 views
0

J'essaie de calculer le nombre de fois que différentes chaînes apparaissent dans un tableau Excel. Une table d'exemple, actuellement en SHEET1, serait:COUNTIFS avec des valeurs uniques Excel

Example table 1

J'ai une autre table dans une autre feuille de calcul où je veux indiquer, pour chaque lettre sur la gauche dans le tableau 1, le nombre d'entrées pour « za "," zc "ou" zd "apparaissent sur la droite. Cependant, je voudrais seulement considérer seulement une entrée de chacun.

Le résultat final, sur la ligne B du SHEET2, devrait être quelque chose comme ceci:

Example Table 2

En ce moment je suis en utilisant une combinaison de SUM et COUNTIFS pour faire le travail. Plus précisément, appliqué à l'exemple, je suis en utilisant la formule suivante:

=SUM(COUNTIFS(Sheet1!A1:A18,Sheet2!$A1,Sheet1!B1:B18,{"za","zc","zd"})) 

La formule fait partie de ce qui est prévu. Cependant, il ne compte pas chaque entrée une seule fois. Au lieu de cela, il compte, pour chaque lettre à gauche, chaque entrée de "za", "zc" ou "zd". Le tableau que la formule revient est comme suit:

Example Table 3

Comment puis-je changer la formule pour qu'il ne ce que je veux?

Merci.

Répondre

1

Ma première pensée serait:

=SUM(MIN (1,COUNTIFS(Sheet1!A1:A18,Sheet2!$A1,Sheet1!B1:B18,{"za","zc","zd"})) 

mais je ne suis pas où je peux tester si le MIN appliquera correctement au tableau NB.SI.ENS des résultats. ;-)

EDITED: La fonction MIN prend au minimum 1 ou tous les éléments dans le tableau COUNTIFS, plutôt que le minimum de 1 et chaque élément dans le tableau COUNTIFS, ce qui est ce dont j'avais peur. L'utilisation de

=MIN(COUNTIFS(Sheet1!A$1:A$18,Sheet2!$A1,Sheet1!B$1:B$18,"za"),1)+MIN(COUNTIFS(Sheet1!A$1:A$18,Sheet2!$A1,Sheet1!B$1:B$18,"zc"),1)+MIN(COUNTIFS(Sheet1!A$1:A$18,Sheet2!$A1,Sheet1!B$1:B$18,"zd"),1) 

obtiendra les résultats souhaités. C'est un peu maladroit, mais plus simple qu'une formule matricielle. Si vous voulez une formule de tableau, vous pouvez utiliser:

=SUM(FREQUENCY(IFERROR(MATCH({"za","zc","zd"},(IF(Sheet1!$A$1:$A$18=$A5,Sheet1!$B$1:$B$18)),0),""),IFERROR(MATCH({"za","zc","zd"},(IF(Sheet1!$A$1:$A$18=$A5,Sheet1!$B$1:$B$18)),0),""))) 

Il utilise la fonction de fréquence de prendre un ensemble de valeurs et de voir le nombre d'éléments dans un autre ensemble de valeurs se situent dans chacune des plages de données. Puisque vous avez besoin de texte au lieu de chiffres, nous utilisons la fonction MATCH pour trouver la première fois que la valeur apparaît dans votre liste, en retournant "" avec la fonction IFERROR si ce n'est pas le cas. (Nous avons seulement besoin de la première occurrence puisque vous ne voulez pas savoir combien il y a d'occurrences). Comme c'est du texte, nous utilisons la même entrée pour les deux arguments pour FREQUENCY. Par conséquent, si vous avez besoin de changer les valeurs que vous recherchez ou les plages dans lesquelles vous recherchez, assurez-vous de les changer tous les deux! Alternativement, vous pouvez lister les valeurs quelque part, disons dans F1: F3, et faites une plage nommée pour cela, une autre pour A1: A18, et une autre pour B1: B18.Votre formule serait alors ressembler à quelque chose comme ceci:

=SUM(FREQUENCY(IFERROR(MATCH(SearchValues,(IF(colA=$A2,colB)),0),""),IFERROR(MATCH(SearchValues,(IF(colA=$A2,colB)),0),""))) 

Ensuite, il vous suffit de modifier vos définitions de gamme nommées et vos formules se mettre à jour. :-)

REMARQUE: étant donné qu'il s'agit d'une formule matricielle, vous devez fermer la cellule en appuyant sur CTRL + MAJ + ENTRÉE plutôt que sur ENTRÉE. Lorsque vous regardez la barre de formule, vous devriez voir

{=SUM(FREQUENCY(IFERROR(MATCH(SearchValues,(IF(colA=$A2,colB)),0),""),IFERROR(MATCH(SearchValues,(IF(colA=$A2,colB)),0),"")))} 

Il ne fonctionne pas pour entrer les accolades vous-même. ;-)

+0

Merci beaucoup pour l'aide. J'ai essayé votre suggestion mais elle ne renvoie que 0. – franciscofcosta

+0

J'ai maintenant eu l'occasion de tester les données et les formules et j'ai mis à jour ma réponse. :-) –

+0

Merci Erin. Je ne pouvais pas le faire avec la formule Array, mais cela fonctionnait en utilisant MIN. Je vous remercie. – franciscofcosta

1

Vous pouvez utiliser cette formule à B1 et remplissage vers le bas:

B1: 
=SUMPRODUCT(((Sheet1!$A$1:$A$18=A1)*(Sheet1!$B$1:$B$18= {"za","zc","zd"}))/ 
    COUNTIFS(Sheet1!$A$1:$A$18,Sheet1!$A$1:$A$18,Sheet1!$B$1:$B$18,Sheet1!$B$1:$B$18)) 

enter image description here

+0

Merci pour votre aide – franciscofcosta