Comment puis-je faire référence à deux colonnes différentes dans une fonction COUNTIF?

11

Je ferai de mon mieux pour expliquer. Disons que j'ai une feuille qui ressemble à ceci (dans cet exemple artificiel, disons que j'envoie des e-mails marketing à diverses personnes, je connais leur âge et leurs codes postaux, et je veux suivre les taux de clics dans ces e-mails):

        A   |    B        |    C  
  1     Age |    zip code |  click?  
  2     26  |    11111    |  true  
  3     27  |    11112    |  true  
  4     28  |    11111    |  false  
  5     27  |    22222    |  false  
  6     28  |    11112    |  false  
  7     26  |    22222    |  true  

Maintenant, je veux suivre diverses statistiques. Dans ce cas, je souhaite suivre le taux de clics par âge et par code postal. J'ai donc une table comme celle-ci:

      E         F          G 
 1   Age  |  # sent  | # clicked
 2   26   |
 3   26   |
 4   27   |
 5   28   |

Donc en gros dans la colonne "# envoyé", je peux mettre (en F2 par exemple):

=COUNTIF(A:A, E2)

Et cela entraînerait un 2 dans la cellule F2, car il y avait deux occurrences de "26" dans la colonne A.

Mais maintenant, que faire si je veux savoir combien de clics? Je veux dire quelque chose comme:

=COUNTIF(A:A == E2  AND  C:C == True, for the same row where A:A matched E2)

Je sais que je peux ajouter une autre colonne D avec une formule comme

=IF(C2, A2, "")

Ce qui ne sera que l'âge dans la colonne D si la colonne C est vraie. Mais je peux avoir potentiellement de nombreux critères et il ne semble pas que je devrais ajouter une autre "fausse" colonne pour chaque colonne de critères que j'ai.

Y a-t-il un moyen de faire cela? Sinon dans Google Docs, dans Excel?

Jer
la source
Remarque: la réponse pour les nouvelles feuilles de calcul Google est là-bas .

Réponses:

11

Utiliser une combinaison des opérations ARRAYFORMULA, SUM et arithmetic

Voici la fonction pour compter tous les clics d'un jeune de 26 ans:

=ARRAYFORMULA(sum((A:A=26) * (C:C="true")))

Cette opération comporte 3 parties.

  • L' ARRAYFORMULA se charge de boucler sur la plage spécifiée
  • Le SUM gère le comptage de tous les vrais résultats

Essentiellement, true est converti en 1 et false est converti en 0. La logique booléenne est effectuée à l'aide d'opérations arithmétiques.

Une opération AND utilise la multiplication:

  • (1 * 1) = 1 - (True && True) = True
  • (1 * 0) = 0 - (Vrai && Faux) = Faux
  • (0 * 0) = 0 - (Faux && Faux) = Faux

Une opération OU utilise une combinaison de la fonction * SIGN et de l'addition:

  • signe (1 + 1) = 1 - (Vrai || Vrai) = Vrai
  • signe (1 + 0) = 1 - (Vrai || Faux) = Vrai
  • signe (0 + 0) = 0 - (Faux || Faux) = Faux

Remarque: La fonction de signe est nécessaire en raison de la façon dont l'addition booléenne fonctionne différemment de l'addition arithmétique. Fondamentalement, dans l'addition booléenne 1 + 1 = 1, dans l'addition arithmétique 1 + 1 = 2. Évidemment, l'addition arithmétique gâchera le décompte, vous devez donc exécuter les résultats des opérations d'addition via une fonction de signe. La fonction de signe renvoie 1 si la valeur est positive, 0 si la valeur est 0 et -1 si la valeur est négative.

Supposons que vous vouliez compter les clics pour tous les utilisateurs âgés de 20 à 25 ans:

=ARRAYFORMULA(sum(sign((A:A=20) + (A:A=21) + (A:A=22) + (A:A=23) + (A:A=24) + (A:A=25)) * (C:C="true")))
Plie d'Evan
la source
SIGNE n'est pas requis ici, n'est-ce pas? aucune cellule ne peut être both20 et 23, par exemple, donc l'addition ne vous donnera jamais une valeur> 1 dans ce cas. SIGN n'est requis que si les conditions ne s'excluent pas mutuellement. Ne serait-il pas plus facile de faire entre 20 et 25 plus facilement avec cette version? =arrayformula(sum((A:A>=20)*(A:A<=25)*(C:C=TRUE)))
barry houdini
J'essayais d'expliquer l'utilisation générale de la logique OU. Si les tests n'étaient pas exclusifs (contenus dans la même colonne) alors la fonction SIGN serait nécessaire. Dans ce cas, ce n'est pas le cas. Et, oui, votre exemple serait la meilleure approche mais ne démontre pas l'utilisation de OR. J'essayais de penser à une approche simpliste pour démontrer l'utilisation de la RO qui correspondait à la question du PO, mais je ne suis évidemment pas très bon pour trouver des exemples dès le départ. Si vous avez de meilleurs exemples, je vous encourage à modifier / améliorer la réponse.
Evan Plaice
Toutes mes excuses, Evan, j'ai mal compris - c'est un excellent exemple.
barry houdini
vous pouvez éviter = true, donc: = ARRAYFORMULA (sum ((A: A = 26) * C: C))
tic
1
@tic Je n'utilisais pas le booléen true (qui est VRAI dans les feuilles de calcul Google). Je faisais référence à "true" la chaîne utilisée par l'op dans sa question. Essayez-le, je suis presque sûr que si vous testez les valeurs de C: C, il retournera toujours TRUE sur une chaîne non vide. Dans les cellules du tableur, Google s'en tient aux règles Excel via JavaScript. Bienvenue dans le monde amusant des abstractions qui fuient.
Evan Plaice
10

À l'heure actuelle, la nouvelle feuille de calcul Google prend en charge COUNTIFS, qui peut gérer directement le travail requis.

=COUNTIFS(A:A, E2, C:C, "true")

Liste toutes les plages et la comparaison à faire séparées par des virgules.

swarajk1
la source
4
Merci de m'avoir récompensé en faisant défiler tout en bas. C'est la réponse lorsque vous travaillez avec les nouvelles feuilles Google.
Christiaan Westerbeek
3

Dans Excel, j'utiliserais SUMPRODUCT dans Excel 2003 ou COUNTIFS (avec un "S") dans Excel 2007 ou version ultérieure ....... mais dans Google Docs essayez ceci

=arrayformula(sum((A:A=E2)*(C:C=TRUE)))

barry houdini
la source
3
=COUNTA( IFERROR( FILTER('Guest List'!$G:$G ; 'Guest List'!$G:$G = "Yes" ; 'Guest List'!$L:$L = "USA" ) ) )

C'était pour deux colonnes - je l'utilise pour ma liste d'invités de mariage - dans ce cas, tabuler "Oui" lors de l'envoi d'une sauvegarde de la date et "USA" pour l'emplacement, afin que je puisse calculer les frais de port plus tard. Il peut y avoir une formule plus courte, mais cela semble fonctionner, donc je ne joue pas avec elle!

Comptage heureux.

Shef
la source
1

Dans Excel, j'oublierais les formules et utiliserais des tableaux croisés dynamiques.

Vous devrez peut-être ajouter une colonne "compteur", qui pourrait être utilisée à plusieurs reprises comme variable que vous additionnez pour obtenir des résultats.

MaryC.fromNZ
la source
0

Vous pouvez ajouter le tableau que vous souhaitez tester dans {}.

Dans l'exemple ci-dessous:

=countif({F2,H2,J2,L2,N2,P2,R2,T2,V2,W2},"TRUE")
Stuart Murless
la source