函数内部的布尔“或”

函数内部的布尔“或”

我对 excel 或 vba 并不陌生;但是,我对 excel 中缺少布尔“或”函数感到有些困惑。如您所知,“&”函数可以正常工作,但您无法在公式中插入“|”或“||”运算符。有没有其他方法可以给我一个“或”?

注意:预定义的“或函数”(即 [or(condition1, condition 2...)] 在这种情况下没有帮助。它评估另一组单元格而不是当前单元格中的值,并返回“true”或“false”而不是数值。

我当前使用的代码如下: =IF(IFERROR(INDEX($H$2:INDIRECT("H"&ROW()-1),MATCH(7,$D$2:INDIRECT("D"&ROW()-1),0)),0)=99,(INDIRECT("F"&ROW())*2),INDIRECT("F"&ROW()))

当前正在匹配值“7”。我需要它匹配多个值,例如 Match(5|6|7,... 或 Match (5||6||7,...

有什么好主意吗?

答案1

这非常笨重,但您可以在 INDEX/MATCH 中嵌套 IFERROR 语句。

=INDEX(D:D,IFERROR(MATCH(5,D:D,0),IFERROR(MATCH(6,D:D,0),IFERROR(MATCH(7,D:D,0),""))))

ETA:它的工作原理基本上是在 D 列中查找 5,然后是 6,然后是 7。Barry 在评论中对这个答案的解决方案可能比这个更好。

答案2

假设您想要匹配567并找到其中任何一个的第一个匹配行,您可以使用此公式

=IF(IFERROR(INDEX($H$2:INDIRECT("H"&ROW()-1),AGGREGATE(15,6,MATCH({5,6,7},$D$2:INDIRECT("D"&ROW()-1),0),1)),0)=99,2,1)*INDIRECT("F"&ROW())

AGGREGATE函数仅存在于 Excel 2010 或更高版本中

这是有效的,因为该MATCH部分现在返回一个由 3 个值组成的“数组” - 5、6 和 7 各一个 - 要么是范围内的数字位置,要么#N/A如果它们不存在于范围内,所以匹配可能会返回此结果

{#N/A,4,11}

这意味着未找到 5,在查找范围的第 4 行找到了 6,而在第 11 行找到了 7。

因此该AGGREGATE函数如下所示:

AGGREGATE(15,6,{#N/A,4,11},1)

其中 14 是应用的函数类型 [ SMALL],6 表示忽略错误,末尾的 1 定义 的 k 值SMALL,因此基本上它只取最小值,{#N/A,4,11}同时忽略错误,因此在本例中它返回 4,这对应于 5、6 或 7 的第一个匹配项

答案3

“a OR b”函数只是“NOT (AND (NOT (a); NOT (b)))”函数的组合函数。如果这样使用,将得到以下结果。

A,真,真,假,假;

B、真,假,真,假;

函数,TRUE,TRUE,TRUE,FALSE;

这可以扩展到包含任意数量的变量,但现在真正的问题是您是否可以将其与匹配函数一起使用。需要更多细节进行实验,如果可能的话,还需要文件。

不过,您可以为此编写一个脚本,用一个简单的循环尝试所有的值。

相关内容