Excel VBA有点反向查找 - 有更好的选择吗?

时间:2014-10-24 20:40:59

标签: excel vba excel-vba lookup

设置

我有两张纸,其中一张包含文字数据,另一张包含查找数据。

enter image description here

问题

我需要确定一行是否包含匹配的countryname并从表2中提取其相应的id。这与VLOOKUP或Match函数相反,我在表2中寻找表1的数据。

除了循环第1页数据中每一行的整个第2页数据外,还有什么简单的方法吗?

2 个答案:

答案 0 :(得分:2)

怎么样:

=LOOKUP(9.9E+300,SEARCH(Sheet2!$B$1:$B$2,A25),Sheet2!$A$1:$A$25)

将25美元更改为您的确切范围,或使用命名范围。如果找到则会返回ID,如果找不到,则返回#N / A,如果有多个匹配,则只能获得最后一个匹配。

编辑:如果你想要第一场比赛,你可以使用这个公式:

=INDEX(Sheet2!$A$1:$A$25,MATCH(1=1,INDEX(ISNUMBER(SEARCH(Sheet2!$B$1:$B$25,A1)),0,0),),1)

编辑II:这是如何工作的

两个示例中的SEARCH函数说明找到单元格Sheet2!$B$1:$B$25

范围(数组)A1中任何单词的起始位置

在第一个示例中,LOOKUP将查找小于9.9E + 300的数字(行号)并返回结果向量中的行的值(这就是它返回最后匹配结果的原因) )。

在第二个示例中,MATCH(1=1,INDEX(ISNUMBER(SEARCH(Sheet2!$B$1:$B$25,A1)),0,0)将通过查找INDEX函数生成的数组中的第一个true(1 = 1)来确定行号。然后外部INDEX函数返回相邻列(ID)。

答案 1 :(得分:0)

您可以使用工作表公式执行此操作。

我选择使用表和结构化引用,但您可以使用其他方法:

在sheet1上:

B2:    =IFERROR(LOOKUP(2,1/ISNUMBER(SEARCH(Countries[CountryName],A2)),Countries[ID]),"")

B2:  =IFERROR(LOOKUP(2,1/ISNUMBER(SEARCH(Sheet2!$B$2:$B$258,A2)),Sheet2!$A$2:$A$258),"")

将返回ID或空白。

通常输入此公式。 LOOKUP将忽略div / 0错误,匹配1 / True(= 1)并返回result_vector中相应位置的值