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

如何用ArrayFormula实现多列COUNTIF批量求和(Google Sheets)

解决Google Sheets中COUNTIF+VLOOKUP批量统计的数组公式方案

嘿,我太懂你逐行复制公式的痛苦了——上千行的重复操作简直是效率杀手!之前用ArrayFormula、MMULT、SIGN尝试没成功?别慌,咱们一步步把这个批量统计的需求搞定。

核心思路

我们要把VLOOKUP返回的多列结果批量转换成「是否包含目标关键词」的布尔值,再对每行的布尔值求和,用ArrayFormula一次性完成所有行的计算,彻底告别复制粘贴。

具体公式实现

假设你的表格结构是:

  • A列是需要匹配的关键字/ID(从A2开始到A1001)
  • 数据源在Sheet2!A:E区域,VLOOKUP需要返回其中的B到E列

列1:统计包含"Defense"的数量

在结果单元格(比如B2)输入:

=ArrayFormula(IF(A2:A1001="",,MMULT(--REGEXMATCH(VLOOKUP(A2:A1001, Sheet2!A:E, COLUMN(Sheet2!B:E), FALSE), "Defense"), SEQUENCE(COLUMNS(Sheet2!B:E), 1, 1, 0))))

列2:统计包含"Offense"的数量

在相邻单元格(比如C2)输入:

=ArrayFormula(IF(A2:A1001="",,MMULT(--REGEXMATCH(VLOOKUP(A2:A1001, Sheet2!A:E, COLUMN(Sheet2!B:E), FALSE), "Offense"), SEQUENCE(COLUMNS(Sheet2!B:E), 1, 1, 0))))

公式拆解(帮你搞懂每一步)

  • VLOOKUP(...)批量匹配:
    用A2:A1001作为批量输入,COLUMN(Sheet2!B:E)指定要返回的多列(这里是第2到第5列),结合ArrayFormula让VLOOKUP一次性输出所有行的多列结果,而非单行。
  • REGEXMATCH(..., "Defense")判断匹配:
    检查VLOOKUP返回的每个单元格是否包含"Defense",返回TRUE或FALSE。需要忽略大小写的话,改成"(?i)Defense"即可。
  • --转换布尔值:
    把TRUE转成1、FALSE转成0,让布尔值能被数值求和。
  • MMULT(..., SEQUENCE(...))批量求和:
    SEQUENCE生成一个和返回列数相同的全1列向量,MMULT会对每行的1/0数组求和,替代逐行的COUNTIF功能。
  • IF(A2:A1001="",,...)优化显示:
    避免空行显示多余的0,让空行保持空白,表格更整洁。

常见失败原因排查

如果之前尝试没成功,大概率是这几个问题:

  • VLOOKUP没返回多列数组:一定要用COLUMN(返回列范围)指定多列,不能写单个列号。
  • 布尔值没转数字:忘记加--的话,MMULT无法对布尔值求和。
  • MMULT维度不匹配:SEQUENCE的行数必须和VLOOKUP返回的列数一致,用COLUMNS(返回列范围)自动获取就不会出错。

灵活调整技巧

  • 要覆盖更多行(比如2000行),把A2:A1001改成A2:A2000或者直接A2:A(自动处理所有非空行)。
  • 如果是精确匹配而非包含,把REGEXMATCH换成= "Defense"即可,比如--(VLOOKUP(...) = "Defense")。

内容的提问来源于stack exchange,提问作者kouki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:02:56