修复Google Sheets中SUMPRODUCT/QUERY函数,实现双条件跨数组统计
解决Google Sheets跨数组双条件统计问题
针对你需要统计包含“头晕(Dizziness)”且对应特定月度间隔的有效问卷数量的需求,我会提供两种可行的函数修复方案,分别基于SUMPRODUCT和QUERY,解决跨不同大小数组的维度匹配问题:
前提假设
先明确数据结构(如果你的实际列位不同,对应调整即可):
- 病症勾选区域:
C2:G7(每行对应一份问卷的多病症勾选选项) - 月度间隔数据:假设存储在
H2:H7(每行对应该问卷的填写间隔月份,如1、2、6)
方案1:使用SUMPRODUCT函数
原函数大概率因为「多列病症数组」和「单列间隔数组」维度不兼容报错。我们可以用MMULT把多列的病症判断结果转换为单行布尔值,再和间隔条件匹配统计:
统计1个月间隔的问卷数
=SUMPRODUCT( --(MMULT(--(C2:G7="头晕(Dizziness)"), SEQUENCE(COLUMNS(C2:G7),1,1,0)) >= 1), --(H2:H7=1) )
公式拆解
--(C2:G7="头晕(Dizziness)"):把病症区域转成布尔数组(匹配目标病症为1,不匹配为0)MMULT(..., SEQUENCE(COLUMNS(C2:G7),1,1,0)):对每行的布尔值求和,结果>=1就代表该行至少勾选了一次“头晕”--(H2:H7=1):把间隔为1个月的行转成1,其余为0SUMPRODUCT:把两个条件的结果相乘后求和,得到同时符合双条件的问卷总数
灵活调整
要统计2个月或6个月的数量,直接把公式里的1换成2/6就行;也可以引用单元格(比如J1)让公式动态读取目标月份:
=SUMPRODUCT( --(MMULT(--(C2:G7="头晕(Dizziness)"), SEQUENCE(COLUMNS(C2:G7),1,1,0)) >= 1), --(H2:H7=J1) )
方案2:使用QUERY函数
QUERY更适合结构化筛选,通过合并数组+正则匹配的方式,能灵活判断每行是否包含目标病症:
统计1个月间隔的问卷数
=QUERY( {ARRAYFORMULA(TEXTJOIN(",", TRUE, C2:G7)), H2:H7}, "SELECT COUNT(Col2) WHERE REGEXMATCH(Col1, '头晕(Dizziness)') AND Col2=1 LABEL COUNT(Col2) ''", 0 )
公式拆解
ARRAYFORMULA(TEXTJOIN(",", TRUE, C2:G7)):把每行的所有病症合并成一个字符串(自动忽略空值){..., H2:H7}:把合并后的病症字符串和月度间隔列组成新的二维数组REGEXMATCH(Col1, '头晕(Dizziness)'):判断每行的病症字符串里是否包含目标病症Col2=1:筛选出间隔为1个月的行COUNT(Col2):统计符合条件的行数,LABEL COUNT(Col2) ''用于隐藏默认的统计标签
替代写法(无需合并字符串)
如果习惯直接枚举列判断,也可以用这种写法(适合列数固定的场景):
=QUERY( {C2:G7, H2:H7}, "SELECT COUNT(Col8) WHERE (Col1='头晕(Dizziness)' OR Col2='头晕(Dizziness)' OR Col3='头晕(Dizziness)' OR Col4='头晕(Dizziness)' OR Col5='头晕(Dizziness)') AND Col8=1 LABEL COUNT(Col8) ''", 0 )
两种方案都能解决跨数组维度不匹配的问题,你可以根据自己的使用习惯选择。如果数据列位有调整,对应修改公式里的引用即可。
内容的提问来源于stack exchange,提问作者James324
相关产品推荐
相关产品推荐

