Google Sheets多条件COUNTIFS问题:统计合规提交的点赞数
解决Google Sheets统计获批员工点赞数的问题
问题诊断
你的原公式问题在于COUNTIFS无法正确结合ArrayFormula+REGEXMATCH返回的布尔数组作为条件——COUNTIFS的条件参数需要与条件区域一一对应,但你的写法会将整个布尔数组视为单一条件,导致统计逻辑失效。此外,原正则表达式中的.*会匹配包含员工名的任意字符串(比如员工"张三"会匹配"张三123"),如果需要精确匹配提交用户,这会引入错误统计。
解决方案
以下是三种可行的公式,按需选择:
方案1:SUMPRODUCT(推荐,支持批量填充)
在seventh表的C2单元格输入,下拉填充:
=SUMPRODUCT(--(Likes!$E$2:$E=$A2), --REGEXMATCH(Likes!$B$2:$B, "(?i)^("&TEXTJOIN("|", TRUE, staff_roster!$A$2:$A)&")$"))
--(Likes!$E$2:$E=$A2):将"Likes"表E列匹配当前学生的布尔值转为1(匹配)/0(不匹配)--REGEXMATCH(...):检查"Likes"表B列的提交用户是否在获批员工名单中,(?i)忽略大小写,^和$确保精确匹配员工名SUMPRODUCT将两个数组相乘后求和,得到符合条件的点赞数
方案2:QUERY函数(逻辑直观)
同样在C2单元格输入,下拉填充:
=QUERY(Likes!$B$2:$E, "SELECT COUNT(E) WHERE E='"&$A2&"' AND MATCH(B, staff_roster!$A$2:$A, 0) > 0 LABEL COUNT(E) ''", 0)
- 用QUERY语句筛选出E列等于当前学生、且B列属于获批员工的记录,统计数量
LABEL COUNT(E) ''用于移除QUERY默认生成的表头
方案3:自动批量数组公式(无需下拉)
在seventh表的C2单元格输入,自动填充A列所有学生的统计结果:
=ARRAYFORMULA(IF(A2:A="", "", MAP(A2:A, LAMBDA(student, SUMPRODUCT(--(Likes!$E$2:$E=student), --REGEXMATCH(Likes!$B$2:$B, "(?i)^("&TEXTJOIN("|", TRUE, staff_roster!$A$2:$A)&")$"))))))
ARRAYFORMULA+MAP遍历A列所有学生,自动计算每个学生的点赞数IF(A2:A="", "")确保空行不生成错误值
注意事项
如果你的员工名单中包含特殊正则字符(如.、*、+),需要先转义,可修改TEXTJOIN部分为:
TEXTJOIN("|", TRUE, REGEXREPLACE(staff_roster!$A$2:$A, "([\.\*\+\?\|\(\)\[\]\{\}\^\$])", "\\$1"))
内容的提问来源于stack exchange,提问作者gonzalo2000
相关产品推荐
相关产品推荐

