Come posso fare riferimento a due diverse colonne in una funzione COUNTIF?


11

Farò del mio meglio per spiegare. Supponiamo di avere un foglio simile al seguente (in questo esempio inventato, supponiamo di inviare e-mail di marketing a varie persone, conosco l'età e i codici postali e voglio tenere traccia delle percentuali di clic in quelle e-mail):

        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  

Ora voglio tracciare varie statistiche. In questo caso, voglio monitorare la percentuale di clic per età e per codice postale. Quindi ho un tavolo come questo:

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

Quindi sostanzialmente nella colonna "# inviato", posso mettere (in F2, per esempio):

=COUNTIF(A:A, E2)

E questo comporterebbe un 2 nella cella F2, perché c'erano due ricorrenze di "26" nella colonna A.

Ma ora se volessi sapere quanti clic? Voglio dire qualcosa del tipo:

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

So di poter aggiungere un'altra colonna D con una formula simile

=IF(C2, A2, "")

Che sarà solo l'età della colonna D se la colonna C è vera. Ma posso avere potenzialmente molti criteri e non sembra che dovrei aggiungere un'altra colonna "falsa" per ogni colonna di criteri che ho.

C'è un modo per fare questo? Se non in Google Documenti, in Excel?


Nota: la risposta per i nuovi Fogli Google è laggiù .

Risposte:


11

Utilizzare una combinazione di ARRAYFORMULA, SUM e operazioni aritmetiche

Ecco la funzione per contare tutti i clic di un 26enne:

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

Ci sono 3 parti per questa operazione.

  • L'ARRAYFORMULA si prende cura di loop nel range specificato
  • Il SUM gestisce il conteggio di tutti i veri risultati

In sostanza, true viene convertito in 1 e false viene convertito in 0. La logica booleana viene eseguita utilizzando operazioni aritmetiche.

Un'operazione AND utilizza la moltiplicazione:

  • (1 * 1) = 1 - (True && True) = True
  • (1 * 0) = 0 - (Vero && Falso) = Falso
  • (0 * 0) = 0 - (Falso && Falso) = Falso

Un'operazione OR utilizza una combinazione della funzione * SIGN e dell'aggiunta:

  • segno (1 + 1) = 1 - (True || True) = True
  • segno (1 + 0) = 1 - (Vero || Falso) = Vero
  • segno (0 + 0) = 0 - (Falso || Falso) = Falso

Nota: la funzione del segno è necessaria a causa del modo in cui l'aggiunta booleana funziona diversamente dall'aggiunta aritmetica. Fondamentalmente nell'aggiunta booleana 1 + 1 = 1, nell'aggiunta aritmetica 1 + 1 = 2. Ovviamente, l'aggiunta aritmetica rovinerà il conteggio, quindi è necessario eseguire i risultati delle operazioni di aggiunta attraverso una funzione di segno. La funzione segno restituisce 1 se il valore è positivo, 0 se il valore è 0 e -1 se il valore è negativo.

Supponiamo che tu voglia contare i clic per tutti gli utenti di età compresa tra 20 e 25 anni:

=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 non è richiesto qui? nessuna singola cella può essere both20 e 23, ad esempio, quindi l'aggiunta non ti darebbe mai un valore> 1 in questo caso. SIGN è richiesto solo se le condizioni non si escludono a vicenda. Inoltre, con questa versione non si farebbe più facilmente tra 20 e 25? =arrayformula(sum((A:A>=20)*(A:A<=25)*(C:C=TRUE)))
Barry Houdini,

Stavo tentando di spiegare l'uso generale della logica OR. Se i test non fossero esclusivi (contenuti nella stessa colonna), sarebbe necessaria la funzione SIGN. In questo caso non lo è. E sì, il tuo esempio sarebbe l'approccio migliore ma non dimostra l'uso di OR. Stavo cercando di pensare a un approccio semplicistico per dimostrare l'uso dell'OR che si adattava alla domanda dell'OP, ma ovviamente non sono molto bravo a trovare esempi fuori dal comune. Se hai degli esempi migliori, ti incoraggio a modificare / migliorare la risposta.
Evan Plaice,

Mi scuso, Evan, ho frainteso - questo è un esempio eccellente.
Barry Houdini,

puoi evitare = vero, quindi: = ARRAYFORMULA (somma ((A: A = 26) * C: C))
tic,

1
@tic Non stavo usando il vero booleano (che è VERO in Fogli di lavoro Google) mi riferivo a 'true' la stringa che l'op ha usato nella sua domanda. Provalo, sono abbastanza sicuro che se testerai i valori per C: C restituirà sempre VERO su una stringa non vuota. Nelle celle del foglio di calcolo, Google si attiene alle regole di Excel su JavaScript. Benvenuti nel divertente mondo delle astrazioni che perdono.
Evan Plaice,

10

A partire da ora, il nuovo Fogli Google supporta COUNTIFS, che può gestire direttamente il lavoro richiesto.

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

Elencare tutti gli intervalli e il confronto da rendere separati da virgole.


4
Grazie per avermi premiato scorrendo fino in fondo. Questa è la risposta quando si lavora con i nuovi fogli di Google.
Christiaan Westerbeek il

3

In Excel userei SUMPRODUCT in Excel 2003 o COUNTIFS (con una "S") in Excel 2007 o versioni successive ....... ma in Google Documenti prova questo

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

Questo era per due colonne - lo sto usando per la mia lista degli invitati al matrimonio - in questo caso, tabulando "Sì" sull'invio della data di salvataggio e "USA" per la posizione, in modo da poter calcolare le spese postali in un secondo momento. Potrebbe esserci una formula più breve, ma questo sembra funzionare, quindi non sto scherzando!

Buon conteggio.


1

In Excel, dimenticherei le formule e userei le tabelle Pivot.

Potrebbe essere necessario aggiungere una colonna "contatore", che potrebbe essere utilizzata più volte come variabile che somma per ottenere risultati.


0

È possibile aggiungere l'array in cui si desidera verificare {}.

Nell'esempio seguente:

=countif({F2,H2,J2,L2,N2,P2,R2,T2,V2,W2},"TRUE")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.