我对 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
假设您想要匹配5
,6
或7
并找到其中任何一个的第一个匹配行,您可以使用此公式
=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;
这可以扩展到包含任意数量的变量,但现在真正的问题是您是否可以将其与匹配函数一起使用。需要更多细节进行实验,如果可能的话,还需要文件。
不过,您可以为此编写一个脚本,用一个简单的循环尝试所有的值。