在A栏中,我列出了不同的名字。在B列中,我的值为0或1。
我想得到A列中所有唯一名称的计数,其中B列中有1个。
使用下面的数组公式我可以计算唯一的名称但不能在B列上应用条件。
=SUM(1/COUNTIF(A:A,A:A))
答案 0 :(得分:10)
假设不超过100行尝试使用此“数组公式”来计算A2中的不同名称:A100,其中B2中的同一行中有1:B100:
=SUM(IF(FREQUENCY(IF(B2:B100=1,IF(A2:A100<>"",MATCH(A2:A100,A2:A100,0))),ROW(A2:A100)-ROW(A2)+1),1))
通过CTRL+SHIFT+ENTER
请注意,我说不同并不唯一,因为两者不相同
答案 1 :(得分:7)
喜欢这个吗?
=SUM(--(FREQUENCY(IF(($B$1:$B$8=1), COUNTIF($A$1:$A$8, "<"&$A$1:$A$8), ""), COUNTIF($A$1:$A$8, "<"&$A$1:$A$8))>0)))
这是一个数组公式。您必须按 CTL + SHIFT + ENTER
截图
答案 2 :(得分:3)
它必须是一个公式吗?一个非常简单的方法是从A列和B列中取出一个数据透视表。然后将B列设置为过滤字段,将A数设置为值(您需要标记A和B列)。然后枢轴表上的A4(至少在默认情况下)应包含您的答案。这适用于任何大小的列表,并且当有多个条件时确实可以工作。
如果必须是一个公式,它是否必须完全如此?如果您允许在公式运行之前按A排序,那么此工作流程如何。我并不为此疯狂,我怀疑它可以改进。
1)按A(升序或降序)排序,然后按B(降序)排序
2)在C中,C的每一行都有这样的公式:
=if (and(A2<>A1,B2=1),1,0)
C1如下:
=b1
从C2拖动到数据的最后一行(比如c500)。
3)然后通过求和计数C,= sum(c1:c500)。
您当然可以将公式拖动到数据行下方(只要您知道所需的最大数量),它应该为所有空行返回0。然后,当您向A和B添加数据时,其余数据将自动更新。您可能还需要使用数据。
数据透视表解决方案的一个好处是,只要您在现有数据的行中插入新数据,它就可以随数据集自动增长。当然不需要排序。
答案 3 :(得分:3)
这个常见问题的一个相对简单的解决方案是
= SUM((B:B = 1)/ COUNTIFS(A:A,A:A,B:B,B:B))
作为数组公式输入。
您需要将数组的大小限制为实际拥有数据的位置。
答案 4 :(得分:1)
使用数据透视表轻松......: