Google Sheets中AND函数嵌套复杂函数运行失效问题求助
AND()是Google Sheets中的聚合函数,本身不支持逐行数组运算:当你传入整列范围的判断结果(比如REGEXMATCH(Pockets2.0!C:C,"MTC-.*$")返回的整列布尔数组)时,AND()不会对每一行单独返回判断结果,只会把整列所有布尔值聚合计算为单个TRUE/FALSE值。
这会导致IF()返回的结果长度和FILTER()要求匹配的数据源行数不一致,直接触发运行错误。当你移除AND()、直接保留单个REGEXMATCH判断时,REGEXMATCH原生支持数组逐行计算,会返回和C列行数一致的布尔数组,因此公式可以正常运行。
另外你写的AND(判断条件, TRUE())属于完全冗余的写法,第二个参数TRUE()不会对判断结果产生任何影响,没有实际作用。
在数组运算场景(包括FILTER、ARRAYFORMULA等需要逐行匹配的函数内部),不要使用AND()/OR()做逻辑判断:逐行逻辑与用*(布尔乘法)实现,逐行逻辑或用+(布尔加法)实现,运算后会返回和数据源行数一致的布尔数组,符合函数参数要求。
由于你当前AND内的第二个参数是无意义的TRUE(),直接删除AND函数、保留REGEXMATCH判断即可,修正后的完整公式如下:
=IF( K22, ARRAY_CONSTRAIN( FILTER( Pockets2.0!A:E, Pockets2.0!A:A, REGEXMATCH(Pockets2.0!C:C,"MTC"), K22=Pockets2.0!A:A, O22=IF( REGEXMATCH(Pockets2.0!C:C,"MTC-.*$"), -1, 1 ) * Pockets2.0!D:D ), 1, 5 ), )
如果后续需要在这个IF判断中增加多个逐行匹配的条件,用括号包裹每个条件后相乘即可,例如要同时满足C列匹配MTC规则、B列不为空,写法为:(REGEXMATCH(Pockets2.0!C:C,"MTC-.*$"))*(Pockets2.0!B:B<>"")
内容的提问来源于stack exchange,提问作者Yeison Agudelo

