web-dev-qa-db-fra.com

Compter des valeurs uniques avec une condition

Dans la colonne A, j'ai une liste de noms différents. Dans la colonne B, j'ai des valeurs 0 ou 1.

Je veux obtenir un compte de tous les noms uniques de la colonne A qui ont 1 dans la colonne B.

En utilisant la formule de tableau ci-dessous, je suis capable de compter des noms uniques mais je ne peux pas appliquer la condition sur la colonne B.

=SUM(1/COUNTIF(A:A,A:A))
22
Tejas

En supposant qu'il n'y a pas plus de 100 lignes, essayez cette "formule de tableau" pour compter les noms différents dans A2: A100 où il y a un 1 sur la même ligne dans B2: B100:

=SUM(IF(FREQUENCY(IF(B2:B100=1,IF(A2:A100<>"",MATCH(A2:A100,A2:A100,0))),ROW(A2:A100)-ROW(A2)+1),1))

confirmé avec CTRL+SHIFT+ENTER

Notez que je dis différent pas unique car les deux ne sont pas identiques

10
barry houdini

Comme ça?

=SUM(--(FREQUENCY(IF(($B$1:$B$8=1), COUNTIF($A$1:$A$8, "<"&$A$1:$A$8), ""), COUNTIF($A$1:$A$8, "<"&$A$1:$A$8))>0)))

Il s'agit d'une formule matricielle. Vous devrez appuyer sur CTL + SHIFT + ENTER

Capture d'écran

enter image description here

7
Siddharth Rout

Une solution relativement simple à ce problème courant est

= SOMME ((B: B = 1)/COUNTIFS (A: A, A: A, B: B, B: B))

entré sous forme de formule matricielle.

Vous devrez limiter la taille des tableaux à l'endroit où vous avez réellement les données.

3
Dominik

Doit-il s'agir d'une formule? Un moyen très simple de le faire est de créer un tableau croisé dynamique à partir des colonnes A et B. Ensuite, définissez la colonne B comme champ de filtre et Count of A comme valeurs (vous devez étiqueter les colonnes A et B). Ensuite, A4 sur la feuille pivot (au moins par défaut) devrait contenir votre réponse. Cela fonctionnerait pour n'importe quelle liste de tailles et fonctionnerait en effet lorsqu'il y a plusieurs conditions.

S'il doit s'agir d'une formule, doit-elle l'être entièrement? Si vous êtes autorisé à trier par A avant que votre formule fonctionne, alors qu'en est-il de ce flux de travail. Je ne suis pas fou de cela et je pense que cela pourrait être amélioré.

1) Trier par A (croissant ou décroissant), puis par B (décroissant)

2) En C, chaque ligne de C met une formule comme celle-ci:

=if (and(A2<>A1,B2=1),1,0) 

C1 serait le suivant:

=b1 

Faites glisser de C2 jusqu'à la dernière ligne de vos données (disons c500).

3) Comptez ensuite en additionnant C, = somme (c1: c500).

Vous pouvez certainement faire glisser la formule sous les lignes de données (tant que vous connaissez le nombre maximal dont vous aurez besoin), elle devrait retourner 0 pour toutes les lignes vides. Ensuite, lorsque vous ajoutez des données à A et B, le reste se met à jour automatiquement. Vous devrez probablement également utiliser les données.

Une bonne chose à propos de la solution de tableau croisé dynamique est qu'elle peut croître automatiquement avec votre ensemble de données tant que vous insérez les nouvelles données dans les lignes des données existantes. Aucun tri requis bien sûr.

3
BKay

Facile avec un tableau croisé dynamique ......:

SO15944249 example

1
pnuts