COL A COL B COL C
ROW 1 Yes Yes
ROW 2 Yes
ROW 3
ROW 4 Yes Yes
我正在尝试编写一个公式来计算有多少行至少有一列值为“是”。我尝试过COUNTIFS()
对所有三列都使用这个公式,但只有当所有三列都为“是”时才有效。我想计算一行,无论其中有多少个“是”值,只要至少有一个就行。
如果我添加第四列,使用IF
语句查找 YES 值,然后计算该列,我可以更轻松地实现这一点。但是,我在这里寻找单个单元格解决方案。
答案1
您需要使用以下数组公式来完成此操作。
=SUM(--((A1:A4="Yes")+(B1:B4="Yes")+(C1:C4="Yes")>0))
为了表明它是一个数组公式,在 Excel 中输入公式后,按Ctrl+ Shift+Enter而不是Enter。
所发生的情况是A1:A4
将扩展为要评估的数组,A1:A4="Yes"
将扩展为{"Yes", "Yes", "", ""} = "Yes"
,进而变为{TRUE, TRUE, FALSE, FALSE}
。Excel 内部将 TRUE 视为 1,将 FALSE 视为 0。
因此(A1:A4="Yes")+(B1:B4="Yes")+(C1:C4="Yes")
计算结果为{2, 1, 0, 2}
。接下来,{2, 1, 0, 2}
与 进行比较>0
,得到{TRUE, TRUE, FALSE, TRUE}
。为了将 True 改为 1,将 False 改为 0 以进行加法,我添加了一个--
运算符(实际上是双重否定)以使数组{1, 1, 0, 1}
。加起来{1, 1, 0, 1}
得到 3。
无论如何,如果工作簿需要共享,我不建议使用此方法,因为这种方法不易理解;但如果您了解底层机制,它会很有趣。
答案2
如果你的三列连续的那么你可以使用这个公式
=SUMPRODUCT(0+(MMULT(0+(A1:C4="Yes"),{1;1;1})>0))
您需要更改该{1;1;1}
部分,使 1 的数量与列数相同