You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复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)
)

公式拆解

  1. --(C2:G7="头晕(Dizziness)"):把病症区域转成布尔数组(匹配目标病症为1,不匹配为0)
  2. MMULT(..., SEQUENCE(COLUMNS(C2:G7),1,1,0)):对每行的布尔值求和,结果>=1就代表该行至少勾选了一次“头晕”
  3. --(H2:H7=1):把间隔为1个月的行转成1,其余为0
  4. SUMPRODUCT:把两个条件的结果相乘后求和,得到同时符合双条件的问卷总数

灵活调整

要统计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
)

公式拆解

  1. ARRAYFORMULA(TEXTJOIN(",", TRUE, C2:G7)):把每行的所有病症合并成一个字符串(自动忽略空值)
  2. {..., H2:H7}:把合并后的病症字符串和月度间隔列组成新的二维数组
  3. REGEXMATCH(Col1, '头晕(Dizziness)'):判断每行的病症字符串里是否包含目标病症
  4. Col2=1:筛选出间隔为1个月的行
  5. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:41:13