【问题标题】:Vlookup with wildcard not working (partial string match) on long values带有通配符的 Vlookup 对长值不起作用(部分字符串匹配)
【发布时间】:2017-09-05 04:53:59
【问题描述】:

我了解vlookup 与通配符的基本用法,但我最近遇到了问题。

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

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

为什么B2B3 的效果不一样?有什么解决办法吗?

示例:

【问题讨论】:

  • 我发现如果我删除单元格C2中C335之后的数字,那么该功能将起作用。我真的不知道为什么。
  • 据我所知,它没有记录,但 lookup_valuelookup_array 中的单个单元格值都不能超过 255 个字符。这与*LOOKUPMATCH 有关。
  • 除了公式不适用于长字符串,即使是较短的字符串,您的公式也会返回部分匹配的结果。在你的例子中,如果A1:= R7,那么这也将返回a
  • 感谢 Axel,这可能是原因。另外,感谢 Ron 提出这个问题。

标签: excel wildcard vlookup


【解决方案1】:

根据 Axel 的调查和评论,VLOOKUP 不适用于长度超过 255 个字符的值。一种解决方法是使用带有 SEARCH 函数的数组公式来处理更长的值。双击 B1 单元格并粘贴此公式,然后按 CTRL + SHIFT + ENTER 保存它,而不是单独按 Enter:

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

如果您输入正确,选择单元格将在公式周围显示{花括号},它应该会计算出您想要的结果。

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

ISNUMBER 然后创建一个 TRUE(当找到 A1 时)和 FALSE(当未找到 A1 时)的数组

MATCH 然后找到数组中的第一个 TRUE 值。

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

编辑:公式现在搜索 A1 中的值,后跟逗号。这确保了精确匹配。为了同时确保公式可以匹配 C 列中任何单元格中的最后一个值,还在 C 列中的值的末尾添加了一个逗号。

【讨论】:

  • 请注意,使用您的公式以及 OP 发布的数据,A 列中的 C1 等条目将在 D 中返回结果。
  • 感谢您对Michael的帮助,您的解释也很清楚。我试过你的配方后,效果很好。但是,由于 Ron 的第一条评论引起了我的注意,我发现公式返回部分匹配,例如,如果我更改 A1:= R7,它仍然返回 a。有没有办法完全匹配?
  • 嗨卢克,我已经更新了公式,还要求在 A 列中的值之后找到一个逗号。请注意,不必将 C 列中的数据更改为以逗号结尾因为这也在公式中处理。唯一的要求是 C 列中的每个值都以逗号结尾(每个单元格中的最后一个值除外)。逗号后面有空格没关系,但是逗号前面一定不能有空格。
猜你喜欢
  • 1970-01-01
  • 2014-05-05
  • 2018-12-01
  • 2011-12-14
  • 2012-06-15
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多