Google Sheets用ARRAYFORMULA比对多词文本无法自动填充问题
问题1:原ARRAYFORMULA无法自动向下填充的原因
核心问题出在SUM函数的特性:SUM会把传入的所有数组元素聚合为单个全局数值,不会按行分组计算每行的匹配结果,因此公式最终只会输出1个全局判断值,仅在首个单元格返回结果,无法向下扩展生成每行的独立判断。
同时原公式中SEARCH搭配无分组的SPLIT会生成跨所有行、所有关键词的二维数组,没有按行隔离的前提下,求和逻辑完全不符合逐行判断的需求。
问题2:高效比对方案
方案1:BYROW逐行处理(逻辑和原有逐行公式完全兼容,易理解)
直接在Database工作表P3单元格输入以下公式即可自动向下填充,空行自动留空:
=BYROW(J3:J,LAMBDA(j,IF(j="","",IF(SUMPRODUCT(ISNUMBER(SEARCH(TRANSPOSE(Lists!$N$5:$N$23),j&OFFSET(O3,ROW(j)-ROW(J3),0))))>0,"YES","NO")))
逻辑说明:BYROW会逐行遍历J列数据,调用LAMBDA对每行单独执行原本的SUMPRODUCT匹配逻辑,自动输出每行的判断结果。
方案2:纯数组运算(效率更高,适合大数据量)
如果数据行数多,用MMULT代替逐行遍历性能更好:
=ARRAYFORMULA(IF(J3:J="","",IF(MMULT(ISNUMBER(SEARCH(TRANSPOSE(Lists!$N$5:$N$23),J3:J&O3:O))*1,SEQUENCE(ROWS(Lists!$N$5:$N$23),1,1,0))>0,"YES","NO")))
逻辑说明:用MMULT实现数组维度下的按行求和,完全规避SUMPRODUCT无法适配数组的问题,不需要逐行迭代,计算速度更快。
注:QUERY不适合该场景,多关键词模糊匹配的QUERY写法会非常冗余,性能也不如上述两个公式。
内容的提问来源于stack exchange,提问作者d-ron
相关产品推荐
相关产品推荐

