如何在COUNTIF函数中引用两个不同的列?


11

我会尽力解释。假设我有一个看起来像这样的工作表(在这个人为的示例中,假设我要向各种人发送营销电子邮件,我知道他们的年龄和邮政编码,并且我想跟踪这些电子邮件中的点击率):

        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  

现在,我想跟踪各种统计信息。在这种情况下,我想按年龄和邮政编码跟踪点击率。所以我有一张这样的桌子:

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

因此,基本上可以在“发送的#”列中输入(例如在F2中):

=COUNTIF(A:A, E2)

这将导致单元格F2中为2,因为在列A中出现了两次“ 26”。

但是现在,如果我想知道有多少点击,该怎么办?我想说些类似的话:

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

我知道我可以用公式添加另一列D

=IF(C2, A2, "")

如果C列为true,则只有D列的年龄。但是我可能有很多条件,似乎我不必为我拥有的每个条件列添加另一个“假”列。

有没有办法做到这一点?如果不在Google文档中,是否在Excel中?


注意:新的 Google表格的答案就在此处

Answers:


11

结合使用ARRAYFORMULA,SUM和算术运算

这是计算26岁用户的所有点击次数的函数:

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

此操作分为3部分。

  • ARRAYFORMULA采用循环在指定范围内的护理
  • SUM管理着所有计数的真实结果

本质上,将true转换为1,将false转换为0。布尔逻辑通过使用算术运算完成。

一个操作使用乘法:

  • (1 * 1)= 1-(真&&真)=真
  • (1 * 0)= 0-(真&&假)=假
  • (0 * 0)= 0-(False && False)=错误

一个OR操作使用*的组合SIGN功能,另外:

  • 符号(1 +1)= 1-(真||真)=真
  • 符号(1 + 0)= 1-(真||假)=真
  • 符号(0 + 0)= 0-(False || False)= False

注意:由于布尔加法与算术加法的工作方式不同,因此必须使用符号函数。基本上,布尔加法1 + 1 = 1,算术加法1 + 1 =2。显然,算术加法会弄乱计数,因此您需要通过一个符号函数来运行加法运算的结果。如果值为正,则符号函数返回1;如果值为0,则返回0;如果值为负,则返回-1。

假设您要计算20-25岁之间所有用户的点击次数:

=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吗?例如,没有一个单元格可以是both20和23,因此在这种情况下,加法永远不会给您提供大于1的值。仅当条件不是互斥的时才需要SIGN。同样,使用此版本难道不会更容易实现20到25之间吗?=arrayformula(sum((A:A>=20)*(A:A<=25)*(C:C=TRUE)))
Barry houdini 2012年

我试图解释OR逻辑的一​​般用法。如果测试不是排他性测试(包含在同一列中),则将需要SIGN函数。在这种情况下不是。而且,是的,您的示例将是更好的方法,但没有演示OR的使用。我试图考虑一种简单的方法来演示与OP的问题相适应的OR的使用,但是我显然不太擅长提出示例。如果您有更好的示例,建议您编辑/改进答案。
伊万·普赖斯

抱歉,埃文,我误会了-这是一个很好的例子。
巴里·胡迪尼

您可以避免= true,因此:= ARRAYFORMULA(sum((A:A = 26)* C:C))
tic

1
@tic我没有使用布尔值true(在Google Spreadsheets中为TRUE),我指的是op在他的问题中使用的字符串“ true”。尝试一下,我很确定,如果您测试C:C的值,它将始终在非空字符串上返回TRUE。在电子表格单元格中,Google坚持使用JavaScript上的Excel规则。欢迎来到泄漏抽象的有趣世界。
伊万·普赖斯

10

到目前为止,新版Google表格支持COUNTIFS,可以直接处理所需的工作。

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

列出所有范围并进行比较,以逗号分隔。


4
感谢您奖励我一直向下滚动。这是使用新的Google表格时的答案。
Christiaan Westerbeek 2014年

3

在Excel中,我将在Excel 2003中使用SUMPRODUCT,在Excel 2007或更高版本中使用COUNTIFS(带有“ S”)..但是在Google文档中,请尝试此操作

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

这是两列的-在这种情况下,我将其用于我的婚礼客人名单-在发送保存日期时以“是”列表,在位置上以“美国”列表,因此以后可以计算邮费。可能会有一个更短的公式,但这似乎有用,所以我不会在意它!

计数愉快。


1

在Excel中,我会忘记公式,而使用数据透视表。

您可能需要添加一个“计数器”列,该列可以一遍又一遍地用作求和结果的变量。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.