在搜索多个条件时,Excel替代FIND函数

时间:2018-05-14 17:10:03

标签: excel excel-vba excel-formula vba

我想查找给定单元格是否包含列表中包含的值。然后我想使方程动态化,以便根据列表中的哪个项目产生不同的输出。 B列(索引/匹配?)中应该有一个等式,它根据列A中的值是否包含C列中的一个代码,从列D返回一个值。

Column A     Column B              Column C    Column D
ABC12D       Equation=$40          ABC         $40
XYZ15Q       Equation=$20          MNO         $30
MNO26P       Equation=$30          XYZ         $20

2 个答案:

答案 0 :(得分:2)

使用你的设置,你可以使用INDEX / MATCH和你的FIND作为阵列形式:

=INDEX($D$1:$D$3,MATCH(TRUE,ISNUMBER(FIND($C$1:$C$3,A1)),0))

作为一个数组公式,需要在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter来确认。

enter image description here

答案 1 :(得分:0)

excel函数中的or语句测试一系列逻辑语句。你想要的是更接近以下内容的东西。

{=TEXTJOIN(", ",TRUE,IF(IFERROR(FIND(B1,A$1:A$5),"ERROR")<>"ERROR",ROW(A$1:A$5),""))}

对于您正在测试的B列中的每个项目,此功能可以粘贴在C列中。

这是一个数组函数,在单元格中输入后,需要使用Ctrl + Shift + Enter才能使其正常工作

此功能将在A1:A5范围内的B1中搜索文本,并报告它找到B1中用逗号和空格分隔的文本的库存。在您的示例中,它会返回1。如果abc也存在于A列的第三个条目中,那么它将返回1, 3

就像故障一样,

  1. FIND(B1,A$1:A$5)在A1:A5范围内的B1中搜索文本。它返回一个包含文本位置的数组,在您的示例中,它将返回{1,#VALUE,#VALUE}
  2. 由于FIND函数无法找到指定的文本,因此会返回#VALUE错误。 IFERROR(____,"ERROR")捕获#VALUE并将其替换为“ERROR”。它会将您的数组修改为{1,"ERROR","ERROR"}
  3. 如果数组值不是IF(___,ROW(A$1:A$5),""),则if语句"ERROR"将返回数组的行,否则返回空格。这会将您的数组修改为{1,"",""}
  4. TEXTJOIN(", ",TRUE,_____)语句将数组连接在一起,用逗号和空格分隔。 TRUE参数跳过数组的空白部分。
  5. 如果要根据发生的行返回自定义值,可以将ROW(A$1:A$5)替换为具有相应值的范围。