2017-09-05 221 views
1

我明白带通配符的vlookup的基本用法,但最近我遇到了一个问题。通配符无法正常工作(部分字符串匹配)的Vlookup上长值

我需要查找一个单元格中包含的值作为字符串的一部分。在下面的示例中,我将查找colC中的colA,然后将col D中的值返回col B

我使用=VLOOKUP("*"&A1&"*",C$1:D$2,2,0),它只适用于B1

为什么B2 & B3工作不一样?任何解决方案

样品:

Sample

+0

我发现如果在单元格C2中删除C335之后的数字,那么该功能将起作用。我真的不知道为什么。 – Luke

+0

据我所知,没有记录,但'lookup_value'和'lookup_array'中的单个单元格值都不能超过255个字符。这与'* LOOKUP'和'MATCH'有关。 –

+0

除了公式不适用于长字符串,即使是较短的字符串,公式也会返回部分匹配的结果。在你的例子中,如果'A1:= R7',那么这也将返回'a' –

回答

0

根据你的调查和评论的阿克塞尔,VLOOKUP不超过255个字符值工作。解决方法是使用具有处理更长值的SEARCH功能的数组公式。双击单元格B1并粘贴此公式,然后按CTRL + SHIFT + ENTER,而不是只按自身回车保存:

=INDEX($D$1:$D$2,MATCH(TRUE,ISNUMBER(SEARCH(A1&",",$C$1:$C$2&",")),0)) 

如果你输入正确,选择上就会显示{花括号}在公式周围,它应该评估到你想要的结果。

该公式首先创建一个数组,搜索C1中每个单元格中A1的位置:C2。该数组将包含数字(找到A1时)和错误(未找到A1时)。

ISNUMBER然后创建TRUE的阵列(当A1是发现)和FALSE(当未发现A1)

MATCH然后查找阵列中的第一个TRUE值。

INDEX然后从D1:D2返回相应的值。

编辑:该公式现在搜索A1后面跟着逗号的值。这确保了完全匹配。为了确保公式可以匹配列C中任何单元格的最后一个值,逗号也会添加到列C中值的末尾。

+1

请注意,使用您的公式以及OP发布的数据,“A”列中的“C1”条目将返回结果“D”。 –

+0

谢谢你帮助迈克尔,你的解释也很清楚。我尝试过你的配方后,它运行良好。但是,由于Ron的第一条评论引起了我的注意,我发现该公式返回部分匹配,例如,如果我更改A1:= R7,它仍返回a。有没有一种方法可以完全匹配? – Luke

+0

嗨卢克,我已经更新了公式,还需要在A列中的值后面找到逗号。请注意,没有必要更改C列中的数据以逗号结束,因为这也在公式中处理。唯一的要求是C列中的每个值都以逗号结尾(除了每个单元格中的最后一个值)。在逗号后面是否有空格并不重要,但逗号之前不得有空格。 – Michael