Como posso me referir a duas colunas diferentes em uma função COUNTIF?


11

Vou tentar o meu melhor para explicar. Digamos que eu tenha uma planilha parecida com esta (neste exemplo elaborado, digamos que estou enviando e-mails de marketing para várias pessoas, conheço suas idades e códigos postais e desejo acompanhar as taxas de cliques nesses 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  

Agora eu quero acompanhar várias estatísticas. Nesse caso, desejo acompanhar a taxa de cliques por idade e código postal. Então, eu tenho uma tabela como esta:

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

Então, basicamente, na coluna "# enviado", posso colocar (em F2, por exemplo):

=COUNTIF(A:A, E2)

E isso resultaria em um 2 na célula F2, porque houve duas ocorrências de "26" na coluna A.

Mas agora e se eu quiser saber quantos cliques? Eu quero dizer algo como:

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

Eu sei que posso adicionar outra coluna D com uma fórmula como

=IF(C2, A2, "")

Qual será apenas a idade na coluna D se a coluna C for verdadeira. Mas posso ter potencialmente muitos critérios e não parece que eu precise adicionar outra coluna "falsa" para cada coluna de critérios que tenho.

Existe uma maneira de fazer isso? Se não estiver no Google Docs, no Excel?


Nota: a resposta para as novas Planilhas Google está lá em baixo .

Respostas:


11

Use uma combinação das operações ARRAYFORMULA, SUM e aritmética

Aqui está a função de contar todos os cliques aos 26 anos:

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

Existem 3 partes para esta operação.

  • O ARRAYFORMULA cuida do loop acima do intervalo especificado
  • O SUM gerencia contando todos os verdadeiros resultados

Essencialmente, true está sendo convertido em 1 e false está sendo convertido em 0. A lógica booleana é feita usando operações aritméticas.

Uma operação AND usa multiplicação:

  • (1 * 1) = 1 - (Verdadeiro && Verdadeiro) = Verdadeiro
  • (1 * 0) = 0 - (Verdadeiro e& Falso) = Falso
  • (0 * 0) = 0 - (Falso e& Falso) = Falso

Uma operação OR usa uma combinação da função e adição * SIGN :

  • sinal (1 + 1) = 1 - (Verdadeiro || Verdadeiro) = Verdadeiro
  • sinal (1 + 0) = 1 - (Verdadeiro || Falso) = Verdadeiro
  • sinal (0 + 0) = 0 - (Falso || Falso) = Falso

Nota: A função de sinal é necessária devido ao modo como a adição booleana funciona de maneira diferente da adição aritmética. Basicamente, na adição booleana 1 + 1 = 1, na adição aritmética 1 + 1 = 2. Obviamente, a adição aritmética atrapalha a contagem, portanto, você precisa executar os resultados das operações de adição por meio de uma função de sinal. A função de sinal retorna 1 se o valor for positivo, 0 se o valor for 0 e -1 se o valor for negativo.

Digamos que você queira contar os cliques para todos os usuários entre 20 e 25 anos:

=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 não é obrigatório aqui é? nenhuma célula pode ter both20 e 23, por exemplo, portanto a adição nunca forneceria um valor> 1 nesse caso. SIGN é necessário apenas se as condições não forem mutuamente exclusivas. Também entre 20 e 25 não seria mais fácil com esta versão? =arrayformula(sum((A:A>=20)*(A:A<=25)*(C:C=TRUE)))
Barry houdini

Eu estava tentando explicar o uso geral da lógica OR. Se os testes não fossem exclusivos (contidos na mesma coluna), a função SIGN seria necessária. Nesse caso, não é. E sim, seu exemplo seria a melhor abordagem, mas não demonstra o uso de OR. Eu estava tentando pensar em uma abordagem simplista para demonstrar o uso de OR que se encaixa na pergunta do OP, mas obviamente não sou muito bom em apresentar exemplos. Se você tiver alguns exemplos melhores, recomendamos que você edite / melhore a resposta.
Evan Plaice

Desculpas, Evan, eu entendi errado - esse é um excelente exemplo.
precisa saber é o seguinte

você pode evitar = true, então: = ARRAYFORMULA (sum ((A: A = 26) * C: C))
tic

11
@tic Eu não estava usando o valor booleano true (que é VERDADEIRO no Google Spreadsheets), eu estava me referindo a 'true' a string que o op usou em sua pergunta. Experimente, tenho certeza de que, se você testar os valores para C: C, ele sempre retornará TRUE em uma seqüência de caracteres não vazia. Nas células da planilha, o Google segue as regras do Excel sobre JavaScript. Bem-vindo ao mundo divertido das abstrações com vazamentos.
Evan Plaice

10

A partir de agora, as novas Planilhas Google suportam COUNTIFS, que podem lidar diretamente com o trabalho necessário.

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

Liste todos os intervalos e a comparação a serem separados por vírgulas.


4
Obrigado por me recompensar rolando todo o caminho. Esta é a resposta ao trabalhar com as novas folhas do Google.
Christiaan Westerbeek

3

No Excel, eu usaria SUMPRODUCT no Excel 2003 ou COUNTIFS (com um "S") no Excel 2007 ou posterior ....... mas no Google Docs tente isso

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

Isso foi para duas colunas - estou usando isso para minha lista de convidados do casamento - nesse caso, tabulando "Sim" ao enviar uma data salva e "EUA" para localização, para que eu possa calcular a postagem mais tarde. Pode haver uma fórmula mais curta, mas isso parece funcionar, então não estou mexendo com ela!

Feliz contando.


1

No Excel, eu esquecia fórmulas e usava tabelas dinâmicas.

Pode ser necessário adicionar uma coluna "contador", que pode ser usada repetidamente como a variável que você soma para obter resultados.


0

Você pode adicionar a matriz que deseja testar em {}.

No exemplo abaixo:

=countif({F2,H2,J2,L2,N2,P2,R2,T2,V2,W2},"TRUE")
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.