FILTER(A2:F11,BYROW(ISNUMBER(FIND(I1,A2:F11)),OR))中用or和+及and和*区别
浅谈出口账务和excel函数 在Excel中,OR/AND函数与+/*运算符在数组公式里的核心区别在于:是否支持数组运算(即能否返回多个结果)。
· OR 函数:在BYROW的LAMBDA里,OR只接受单个值的数组作为参数。当你传入ISNUMBER(FIND(...))返回的一行(多个TRUE/FALSE)时,OR会将其聚合为一个标量(TRUE或FALSE),这正是BYROW需要的——每行返回一个值。所以 BYROW(..., OR) 是正确写法。
· + 运算符:+ 是逐元素运算。TRUE+TRUE返回2,TRUE+FALSE返回1。如果写成 BYROW(..., LAMBDA(x, ... + ...)),需要手动把多个条件用+连接,结果是一个数字数组,BYROW再对其聚合。但直接用 BYROW(ISNUMBER(...), OR) 更简洁,因为OR本身就是聚合函数。
· 关键点:OR在BYROW中作为聚合器使用(把一行多个布尔值合并成一个),而+是连接条件用的(如(条件1)+(条件2)表示“或”)。在BYROW场景下,OR直接可用,不需要+。
· AND 函数:同理,AND在BYROW中作为聚合器,把一行多个布尔值合并成一个(全TRUE才TRUE)。BYROW(ISNUMBER(FIND(...)), AND) 是正确写法。
· * 运算符:* 是逐元素乘法,TRUE*TRUE=1,TRUE*FALSE=0。它用于连接多个条件表示“且”,如(条件1)*(条件2)。但在BYROW里,如果你直接写 BYROW(ISNUMBER(...), AND),AND已经完成了聚合,不需要*。
· 关键点:AND是聚合函数,*是条件连接符。在BYROW中,AND直接作为聚合器使用;而*通常用在FILTER的包含条件里(如FILTER(A2:F11, (条件1)*(条件2))),不是BYROW的聚合器。
在BYROW中作为聚合器 ✅ 直接可用,把一行聚合成一个布尔值 ❌ 不直接作为聚合器,+/*是逐元素运算
连接多个条件(表示或/且) ❌ 在数组公式中OR/AND会聚合,不能逐元素返回多个结果 ✅ +表示或,*表示且,逐元素返回数组
典型用法 BYROW(ISNUMBER(FIND(I1,A2:F11)), OR) FILTER(A2:F11, (条件1)+(条件2)) 或 (条件1)*(条件2)
一句话:在BYROW里,OR/AND是聚合器(把一行多列合并成一个值),所以直接写 BYROW(..., OR) 是对的;而+/*是逐元素条件连接符,用于在FILTER等场景中组合多个条件数组,不能替代BYROW里的聚合器。两者角色不同,不能简单互换。