我正在尝试设置一个公式,允许我计算A列中具有相应SUM(Bn:En)>0
的项目数(其中n
是该项目的行)。从概念上讲(对于下面显示的示例数据)我想计算构成我的衣服的颜色数量;此示例数据的公式将返回5
,因为Green
不符合条件。
我之前已经通过在数据末尾添加一个单独的列来完成这样的事情,该列检查是否SUM> 0,然后从那里算起。但是,我想知道是否有一种更直接的方法来实现这一点,并且个人未能在这里得到一个公式。我唯一能想到的就是=COUNTIF(A2:A7,"SUM(B2:E2)>0")
,或其他变种,其中没有一个有效。我也尝试过使用COUNTIFS
(例如=COUNTIFS(B2:B7,">0",C2:C7,">0",...)
),但这导致标准更像AND
语句,而不是OR
,这基本上就是我&# 39;我试图在这里做。
答案 0 :(得分:3)
您需要使用 CTRL + SHIFT + ENTER 输入此公式:
=SUM(IF(FREQUENCY(IF(B2:E7>0,ROW(B2:B7)),IF(B2:E7>0,ROW(B2:B7)))>0,1))
要了解此公式的工作原理,首先要了解FREQUENCY函数的工作原理非常重要。
请参阅下表,了解在将一系列值传递到函数的两个参数时,FREQUENCY和COUNTIF共享的一些相似之处:
COUNTIF 函数返回的数组应该不足为奇。对于表中显示的每个1,数字11(总计数为1)出现在数组中的位置。另请注意,数组中出现0代替所有空格。
FREQUENCY 函数返回的数组有点棘手。数字11(再次,总计数为1)仅出现在第一个数字1所在的数组位置。 FREQUENCY避免所有空值,数组中的0实际上代表了第一个的所有其他实例。请参阅下表,了解更频繁地了解频率内的情况:
最后0(粉红色)来自哪里? FREQUENCY函数会自动在数组末尾添加一个零。
让我们再来看一个例子。假设我们的原始表不仅有1s,还有2s。见下表:
您可以看到FREQUENCY返回的数组与COUNTIF返回的数组有何不同。再次参考下表,了解FREQUENCY内发生的情况:
通常,FREQUENCY函数用于查找数据集中唯一值的数量。为了在这里执行此操作,您可以使用此SUM和IF函数包装数组:
=SUM(IF({8;0;0;3;0;0;0;0;0;0;0;0}>0,1))
此公式返回2(2个唯一值)。
我们现在可以使用我们学到的东西来攻击原始问题。为了计算构成服装物品的颜色数量,我们需要为每一行分配一个大于零的数字。我们可以使用row函数执行此操作。
=IF(B2:E7,ROW(B2:B7))
请参阅下文,了解此公式如何“影响我们的表格”:
接下来,我们将把这个公式放入FREQUENCY功能的两个参数中:
=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))
答案 1 :(得分: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))
答案 2 :(得分:0)
像=MAX(COUNTIF(B2:B7,">0"),COUNTIF(C2:C7,">0"),COUNTIF(D2:D7,">0"),COUNTIF(E2:E7,">0"))
之类的东西会这样做吗?还是我误会了?这会计算值在每列中显示的次数,并查找最大的COUNT。