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

Google Sheets:使用ARRAYFORMULA统计匹配查询字符串的行数异常问题

问题描述

我有一个包含文本列的input table,以及一个存储查询字符串的query table。需要为query table中的每一行,统计input table对应列中包含该行查询字符串的行数。

query table

querycount
alpha
bravo
charlie delta

input table

querydata
this is my alphaone
I will bravo youtwo
what is your namethree
how are youfour
she, charlie delta, saidfive
one two charlie three alphasix

预期输出

querycount
alpha2
bravo1
charlie delta1

我尝试了以下公式,但返回结果所有行均为2,不符合预期,推测是仅统计了query table第一行的alpha:

=ARRAYFORMULA(
    IF(
        A2:A <> "",
        COUNTIF(
            REGEXMATCH(`input table`!A:A, A2:A),
            TRUE     
        ),
    )
)

解决方案

错误原因

原公式中,COUNTIF无法处理数组形式的条件参数。当REGEXMATCH的第二个参数是数组(A2:A)时,COUNTIF只会取数组的第一个元素(即A2的alpha)作为统计条件,导致所有行都返回alpha的匹配次数2。

正确公式

方法1:使用BYROW(Google Sheets 新版本支持)

在query table的B2单元格输入:

=BYROW(A2:A, LAMBDA(q, IF(q="",,SUMPRODUCT(--REGEXMATCH('input table'!A:A, q)))))
  • BYROW遍历A2:A的每个查询词,LAMBDA定义对每个查询词的处理逻辑
  • SUMPRODUCT(--REGEXMATCH(...))将匹配结果(布尔值)转为数字后求和,得到该查询词的总行数

方法2:使用MMULT(兼容性更强)

如果你的Google Sheets版本不支持BYROW,可以用矩阵乘法实现:

=ARRAYFORMULA(IF(A2:A="",,MMULT(--REGEXMATCH('input table'!A:A, TRANSPOSE(A2:A)), SEQUENCE(ROWS('input table'!A:A),1,1,0))))
  • TRANSPOSE(A2:A)将查询词转为列数组,和input table的文本列做全匹配得到二维布尔矩阵
  • --将布尔值转为0/1,MMULT矩阵乘法计算每行的总和,即每个查询词的匹配次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:05:59