如何使用COUNTIFS函数实现A列大于50且B、C、D列中至少一列大于20的行计数
解决Excel中COUNTIFS无法结合OR逻辑的统计问题
嘿,这个场景我太熟悉了!COUNTIFS确实只能处理AND逻辑,没法直接嵌入OR条件,但咱们换个思路就能搞定你要的A>50 且 (B>20 或 C>20 或 D>20)统计需求,给你三个实用方案:
方案1:兼容性最强的SUMPRODUCT公式
这个方法适用于所有Excel版本,原理是用数组运算模拟OR逻辑:
=SUMPRODUCT((A1:A100>50)*((B1:B100>20)+(C1:C100>20)+(D1:D100>20)>0))
逻辑拆解:
(A1:A100>50):返回一组TRUE/FALSE(对应1/0),标记A列大于50的行(B1:B100>20)+(C1:C100>20)+(D1:D100>20):把B/C/D列的判断结果相加,只要其中一列大于20,结果就≥1...>0:把相加结果转成TRUE/FALSE(1/0),标记B/C/D至少一列大于20的行- 最后用
SUMPRODUCT把两组结果相乘后的所有1加起来,就是符合条件的行数
方案2:用补集思想(基于你熟悉的COUNTIFS)
如果你更习惯用COUNTIFS,可以先算A>50的总行数,再减去A>50且B/C/D都≤20的行数,剩下的就是你要的结果:
=COUNTIFS(A1:A100,">50") - COUNTIFS(A1:A100,">50",B1:B100,"<=20",C1:C100,"<=20",D1:D100,"<=20")
这个思路特别好理解:把不符合OR条件的极端情况(三个列都不满足>20)排除掉,剩下的就是至少一个列满足的情况。
方案3:Excel 365/2021专属动态数组公式
如果你用的是新版本Excel,可以用BYROW+LAMBDA来逐行判断,写法更直观:
=SUM(BYROW(A1:D100,LAMBDA(row,(INDEX(row,1)>50)*MAX(INDEX(row,2:4)>20))))
逻辑拆解:
BYROW(A1:D100, LAMBDA(row,...)):遍历每一行数据INDEX(row,1)>50:判断当前行的A列(第一列)是否大于50MAX(INDEX(row,2:4)>20):判断当前行的B/C/D列(2-4列)是否有大于20的,MAX会返回1(只要有一个满足)或0(都不满足)- 相乘后用
SUM累加所有符合条件的行计数
注意事项:
- 如果B/C/D列存在空白单元格,Excel会将空白视为0,
>20判断会返回FALSE,不影响统计结果;如果空白需要特殊处理,可以在公式中加入IF(ISBLANK(...), 0, ...)调整。
内容的提问来源于stack exchange,提问作者Alexander Popov
相关产品推荐
相关产品推荐

