如何统计数组中符合条件的行数?训练记录表格统计求助
解决Excel统计含指定日期的员工行数问题
我懂你的痛点——原来的公式统计的是所有匹配日期的单元格总数(也就是完成的任务数),但你需要的是只要某员工(行)在任意训练模块(列)中出现了指定日期,就算作一个受训员工,统计这样的行数。下面给你两种适配不同Excel版本的解决方案:
方案1:兼容所有Excel版本(包括旧版)
使用SUMPRODUCT结合MMULT实现逐行判断:
=SUMPRODUCT(--(MMULT(--($FZ$9:$GY$1915=DATEVALUE("01/02/2018")),TRANSPOSE(COLUMN($FZ$9:$GY$1915)^0))>0))
公式拆解:
--($FZ$9:$GY$1915=DATEVALUE("01/02/2018")):把所有等于指定日期的单元格转成1,其他转成0,生成一个和原区域大小一致的0/1数组。TRANSPOSE(COLUMN($FZ$9:$GY$1915)^0):生成一个和列数相同的全1垂直数组(任何数的0次方都是1)。MMULT(...):将上面两个数组相乘,得到每行的求和结果(即该行中匹配日期的单元格数量)。--(...)>0:判断每行的求和结果是否大于0(也就是该行是否有至少一个匹配日期),转成1(符合条件)或0(不符合)。SUMPRODUCT:对所有行的1/0结果求和,就是最终符合条件的员工人数。
方案2:适用于Excel 365/2021及以上版本(更简洁)
利用BYROW函数直接遍历每行进行判断:
=SUMPRODUCT(--BYROW($FZ$9:$GY$1915,LAMBDA(row,MAX(--(row=DATEVALUE("01/02/2018"))))))
公式拆解:
BYROW(..., LAMBDA(row, ...)):遍历指定区域的每一行,对每行执行后续逻辑。MAX(--(row=DATEVALUE("01/02/2018"))):对当前行,把匹配日期的单元格转成1,其他转成0,取最大值——如果该行有至少一个1,结果就是1,否则是0。SUMPRODUCT:把所有行的1/0结果相加,得到最终的员工人数。
你也可以用COUNT结合BYROW的写法,效果完全一致:
=COUNT(BYROW($FZ$9:$GY$1915,LAMBDA(row,IF(COUNTIF(row,DATEVALUE("01/02/2018"))>0,1,NA()))))
内容的提问来源于stack exchange,提问作者Grosi
相关产品推荐
相关产品推荐

