Excel的VBA有点反向查找 – 任何更好的select?

build立

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

在这里输入图像说明

问题

我需要确定一行是否包含匹配的国家/地区名称,并从工作表2中提取相应的ID。这与VLOOKUP或Match函数相反,我正在查找工作表2中的工作表1数据。

任何简单的方法来做到这一点,而不是循环表1数据中的每一行的整个表2数据集?

怎么样:

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

将$ 25更改为您的确切范围,或使用命名范围。 这将返回ID如果find,#N / A如果没有find,如果有多个匹配,你将只会得到最后一场比赛。

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

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

编辑II:这是如何工作的

这两个例子中的SEARCH函数都是为单元格A1find范围(数组) Sheet2!$B$1:$B$25中任何单词的起始位置

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

在第二个例子MATCH(1=1,INDEX(ISNUMBER(SEARCH(Sheet2!$B$1:$B$25,A1)),0,0)将通过查找第一个真(1 = 1)由INDEX函数产生的数组,然后外层的INDEX函数返回相邻的列(ID)。

您可以使用工作表公式来做到这一点。

我select了使用表和结构化引用,但可以使用其他方法:

在表1上:

 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或空白。

这个公式通常是input的。 并且LOOKUP将忽略div / 0错误,匹配1 / True(= 1)并返回result_vector对应位置的值