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
函数都是为单元格A1
find范围(数组) 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对应位置的值