COUNTIF标准与行的总和

我试图build立一个公式,这将允许我计算列A中具有相应的SUM(Bn:En)>0 (其中n是该项目的行)的项目数。 从概念上(对于下面显示的示例数据),我想要统计构成我的衣服的颜色的数量; 此示例数据的公式将返回5 ,因为Green不符合标准。

示例数据集

我以前通过在检查SUM> 0的数据末尾添加一个单独的列来完成类似这样的事情,然后从那里计数。 但是,我想知道是否有一个更直接的方法来完成这一点,并亲自没有得到一个公式在这里工作。 我能想到的唯一的事情就是=COUNTIF(A2:A7,"SUM(B2:E2)>0") ,或者其他variables,都没有工作。 我也尝试过使用COUNTIFS (例如=COUNTIFS(B2:B7,">0",C2:C7,">0",...) ),但是这导致标准更像一个AND语句,而不是一个OR ,这本质上是我在这里要做的。

您将需要input此公式与CTRL + SHIFT + ENTER

 =SUM(IF(FREQUENCY(IF(B2:E7>0,ROW(B2:B7)),IF(B2:E7>0,ROW(B2:B7)))>0,1)) 

要理解这个公式是如何工作的,首先要了解FREQUENCY函数是如何工作的。


例1

请参阅下表以查看某些与FREQUENCY和COUNTIF共享的相似性:将一定范围的值传递给函数的两个参数:

在这里输入图像说明

COUNTIF函数返回的数组应该不会感到意外。 对于表中出现的每个1,数字11(总计数为1)出现在数组中的位置。 还要注意,数组中出现0代替所有的空白。

FREQUENCY函数返回的数组有点棘手。 数字11(再次,总数为1)只出现在数组中第一个数字1所在的位置。 FREQUENCY避免了所有的空白值,数组中的0实际上代表了所有其他的第一个实例。 请参阅下表以获取更清晰的频率内发生的情况:

在这里输入图像说明

最后一个0(粉红色)从哪里来? FREQUENCY函数自动在数组的末尾添加一个额外的零。


例2

让我们再看一个例子。 假设我们原来的表不仅有1个,而且还有2个。 见下表:

在这里输入图像说明

您可以看到FREQUENCY返回的数组与COUNTIF返回的数组不同。 再次参考下面的表格来看看FREQUENCY里面发生了什么:

在这里输入图像描述

通常,频率函数用于查找数据集中唯一值的数量。 为了做到这一点,你可以用这个SUM和IF函数包装数组:

 =SUM(IF({8;0;0;3;0;0;0;0;0;0;0;0}>0,1)) 

这个公式返回2(2个唯一值)。


原来的问题

在这里输入图像说明

现在我们可以用我们学到的来攻击原来的问题了。 为了计算构成服装的颜色数量,我们需要为每行分配一个唯一的数字,其中的数字大于零。 我们可以用行函数来做到这一点。

 =IF(B2:E7,ROW(B2:B7)) 

看下面看这个公式“如何影响我们的表”:

在这里输入图像描述

接下来,我们将把这个公式放入频率函数的两个参数中:

 =FREQUENCY(IF(B2:E7>0,ROW(B2:B7)),IF(B2:E7>0,ROW(B2:B7))) 

见下表:

在这里输入图像说明

最后,我们可以用SUM和IF函数来包装数组,以得到5的答案:

 =SUM(IF({3;0;0;2;0;3;0;0;1;2;0;0}>0,1)) 

这将起作用不要忘了CTRL + SHIFT + ENTER B1:E1 – 您的产品名称范围B2:E2 = – 第一行数据B7:E7 – 最后一行数据

 =SUMPRODUCT(IF(MMULT(IF(B2:E2:B7:E7 > 0,1,0),ROW(INDIRECT("1:"&COUNTA(B1:E1)))) > 0,1,0)) 

例如=MAX(COUNTIF(B2:B7,">0"),COUNTIF(C2:C7,">0"),COUNTIF(D2:D7,">0"),COUNTIF(E2:E7,">0"))做到这一点? 还是我误解? 这将计算每列中出现的值的次数,并find最大的COUNT。