Wie kann ich in einer COUNTIF-Funktion auf zwei verschiedene Spalten verweisen?


11

Ich werde mein Bestes geben, um es zu erklären. Angenommen, ich habe ein Blatt, das so aussieht (in diesem Beispiel sende ich Marketing-E-Mails an verschiedene Personen, kenne deren Alter und Postleitzahl und möchte die Klickraten in diesen E-Mails verfolgen):

        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  

Jetzt möchte ich verschiedene Statistiken verfolgen. In diesem Fall möchte ich die Klickrate nach Alter und Postleitzahl verfolgen. Also habe ich einen Tisch wie diesen:

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

Grundsätzlich kann ich in die Spalte "# gesendet" (zum Beispiel in F2) Folgendes einfügen:

=COUNTIF(A:A, E2)

Und dies würde zu einer 2 in Zelle F2 führen, da es in Spalte A zwei Vorkommen von "26" gab.

Aber was ist, wenn ich wissen möchte, wie viele geklickt haben? Ich möchte etwas sagen wie:

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

Ich weiß, dass ich eine weitere Spalte D mit einer Formel wie hinzufügen kann

=IF(C2, A2, "")

Welches wird aber nur das Alter in Spalte D, wenn Spalte C wahr ist. Aber ich kann möglicherweise viele Kriterien haben und es scheint nicht so, als müsste ich für jede Kriterienspalte, die ich habe, eine weitere "falsche" Spalte hinzufügen.

Gibt es eine Möglichkeit, dies zu tun? Wenn nicht in Google Text & Tabellen, in Excel?


Hinweis: Die Antwort für neue Google Sheets ist dort unten .

Antworten:


11

Verwenden Sie eine Kombination aus den Operationen ARRAYFORMULA, SUM und Arithmetik

Hier ist die Funktion, um alle Klicks eines 26-Jährigen zu zählen:

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

Dieser Vorgang besteht aus 3 Teilen.

  • Die ARRAYFORMULA sorgt dafür, dass der angegebene Bereich durchlaufen wird
  • Die SUMME verwaltet alle wahren Ergebnisse

Im Wesentlichen wird true in 1 und false in 0 konvertiert. Die boolesche Logik wird mithilfe von arithmetischen Operationen ausgeführt.

Eine UND- Operation verwendet die Multiplikation:

  • (1 * 1) = 1 - (True && True) = True
  • (1 * 0) = 0 - (Richtig && Falsch) = Falsch
  • (0 * 0) = 0 - (False && False) = False

Eine ODER- Verknüpfung verwendet eine Kombination aus der Funktion * SIGN und der Addition:

  • Vorzeichen (1 + 1) = 1 - (Wahr || Wahr) = Wahr
  • Vorzeichen (1 + 0) = 1 - (Richtig || Falsch) = Richtig
  • Vorzeichen (0 + 0) = 0 - (Falsch || Falsch) = Falsch

Hinweis: Die Vorzeichenfunktion ist erforderlich, da die boolesche Addition anders funktioniert als die arithmetische Addition. Grundsätzlich gilt für die boolesche Addition 1 + 1 = 1, für die arithmetische Addition 1 + 1 = 2. Offensichtlich wird durch die arithmetische Addition die Anzahl durcheinander gebracht, sodass Sie die Ergebnisse der Additionsoperationen über eine Vorzeichenfunktion ausführen müssen. Die Vorzeichenfunktion gibt 1 zurück, wenn der Wert positiv ist, 0, wenn der Wert 0 ist, und -1, wenn der Wert negativ ist.

Nehmen wir an, Sie wollten die Klicks für alle Benutzer zwischen 20 und 25 Jahren zählen:

=ARRAYFORMULA(sum(sign((A:A=20) + (A:A=21) + (A:A=22) + (A:A=23) + (A:A=24) + (A:A=25)) * (C:C="true")))

SIGN ist hier nicht erforderlich, oder? Keine einzelne Zelle kann beispielsweise both20 und 23 sein, sodass die Addition in diesem Fall niemals einen Wert> 1 ergibt. SIGN ist nur erforderlich, wenn sich die Bedingungen nicht gegenseitig ausschließen. Wäre es mit dieser Version nicht einfacher, zwischen 20 und 25 zu machen? =arrayformula(sum((A:A>=20)*(A:A<=25)*(C:C=TRUE)))
Barry Houdini

Ich habe versucht, die allgemeine Verwendung der ODER-Logik zu erklären. Wenn die Tests nicht exklusiv wären (in derselben Spalte enthalten), wäre die SIGN-Funktion erforderlich. In diesem Fall ist es nicht. Und ja, Ihr Beispiel wäre der bessere Ansatz, zeigt aber nicht die Verwendung von OP. Ich habe versucht, einen simplen Ansatz zu finden, um die Verwendung von OP zu demonstrieren, der zur Frage des OP passt, aber ich bin offensichtlich nicht sehr gut darin, Beispiele aus der Hand zu finden. Wenn Sie einige bessere Beispiele haben, empfehle ich Ihnen, die Antwort zu bearbeiten / zu verbessern.
Evan Plaice

Entschuldigung, Evan, ich habe es falsch verstanden - das ist ein hervorragendes Beispiel.
Barry Houdini

Sie können = true vermeiden, also: = ARRAYFORMULA (Summe ((A: A = 26) * C: C))
tic

1
@tic Ich habe nicht den booleschen Wert true verwendet (der in Google Spreadsheets TRUE ist). Ich habe mich auf den Wert 'true' bezogen, den der Op in seiner Frage verwendet hat. Probieren Sie es aus, ich bin mir ziemlich sicher, dass beim Testen der Werte für C: C immer TRUE für eine nicht leere Zeichenfolge zurückgegeben wird. In den Tabellenkalkulationszellen hält sich Google an die Excel-Regeln für JavaScript. Willkommen in der lustigen Welt der undichten Abstraktionen.
Evan Plaice

10

Ab sofort unterstützt das neue Google Sheets COUNTIFS, das den erforderlichen Auftrag direkt ausführen kann.

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

Listen Sie alle Bereiche und den Vergleich auf, die durch Kommas getrennt werden sollen.


4
Vielen Dank, dass Sie mich dafür belohnt haben, den ganzen Weg nach unten zu scrollen. Dies ist die Antwort bei der Arbeit mit den neuen Google Sheets.
Christiaan Westerbeek

3

In Excel würde ich SUMPRODUCT in Excel 2003 oder COUNTIFS (mit einem "S") in Excel 2007 oder höher verwenden ....... aber in Google Text & Tabellen versuchen Sie dies

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


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

Dies war für zwei Spalten - ich verwende dies für meine Hochzeitsgästeliste - in diesem Fall mit "Ja" beim Senden eines Sicherungsdatums und "USA" für den Standort, damit ich das Porto später berechnen kann. Es mag eine kürzere Formel geben, aber das scheint zu funktionieren, also spiele ich nicht damit herum!

Viel Spaß beim Zählen.


1

In Excel würde ich Formeln vergessen und Pivot-Tabellen verwenden.

Möglicherweise müssen Sie eine "Zählerspalte" hinzufügen, die immer wieder als Variable verwendet werden kann, die Sie summieren, um Ergebnisse zu erhalten.


0

Sie können das Array, das Sie testen möchten, zu {} hinzufügen.

Im folgenden Beispiel:

=countif({F2,H2,J2,L2,N2,P2,R2,T2,V2,W2},"TRUE")
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.