如何用ArrayFormula实现列表条目匹配后自动求和(无匹配返回0)
Google Sheets 数组公式实现匹配求和方案
问题拆解
针对A列的每个固定条目,匹配F列中相同的字母,对对应G列的数值求和;若F列无匹配项则返回0,且必须用数组公式一次性计算所有结果。
你之前的公式失效原因
- 第一个QUERY公式语法错误:QUERY函数没有
WHEN关键字,正确逻辑需用WHERE筛选匹配项,且分组与筛选的逻辑顺序有误。 - 第二个SUMIFS数组公式:SUMIFS默认不支持数组条件批量返回结果,直接套ARRAYFORMULA无法生成对应每个A列条目的求和结果。
可行方案
方案1:QUERY + VLOOKUP 组合(易读性高)
在Sheet2的结果列首单元格(比如B2)输入:
=ARRAYFORMULA(IFERROR(VLOOKUP(A2:A, QUERY(F4:G, "select F, sum(G) where F is not null group by F"), 2, 0), 0))
- 内层
QUERY(F4:G, "select F, sum(G) where F is not null group by F"):对F-G列的月度数据按字母分组求和,自动过滤F列空值(对应当月分数为0的情况)。 - 外层
VLOOKUP(A2:A, ..., 2, 0):用A列每个条目匹配分组后的结果,获取对应求和值。 IFERROR(..., 0):匹配不到时返回0,替代默认的#N/A错误。
方案2:MMULT 纯数组运算
如果想用MMULT实现,公式如下:
=ARRAYFORMULA(MMULT(--(TRANSPOSE(F4:F)=A2:A), G4:G))
--(TRANSPOSE(F4:F)=A2:A):将F列转置后与A列每个条目做匹配,生成布尔矩阵,--把TRUE/FALSE转为1/0。MMULT(..., G4:G):通过矩阵乘法,把每行的1/0与G列数值相乘后求和,得到每个A列条目的对应总和。- 若F列空值较多,可添加过滤优化:
=ARRAYFORMULA(MMULT(--(TRANSPOSE(FILTER(F4:F, F4:F<>""))=A2:A), FILTER(G4:G, F4:F<>"")))
使用说明
把公式粘贴到Sheet2结果列的第一个单元格,数组公式会自动向下填充所有A列条目的结果。
内容的提问来源于stack exchange,提问作者S O
相关产品推荐
相关产品推荐

