Excel:VLOOKUP 和 INDEX+MATCH 返回 #REF

Excel:VLOOKUP 和 INDEX+MATCH 返回 #REF

我试图让一张表中的单元格查找另一张表中的名称,并返回名称单元格右侧一列的值。这本身就是 VLOOKUP 的完美工作。但是,当我在实践中用公式实现这一点时,=VLOOKUP(B2;TypeID!$A$2:$A$8999;2;FALSE)单元格显示“#REF”,将其描述为“无效单元格引用错误”。

我尝试用 INDEX+MATCH 组合替换 VLOOKUP,但结果完全相同。我手动确保 lookup_value 单元格和 table_array 单元格中的值相同,为=B2=TypeID!A592,并且它们属于同一类型,为TYPE。当我使用索引为 1 的 VLOOKUP 时,它会正确返回单元格的值。

值得注意的是,lookup_value 和 table_array 单元格是文本,但我希望从 col_index_num 单元格返回的值是一个数字。

TypeID 表的一小段摘录:

A                     B
1 Amber Cytoserocin  |  ISK 89 999,97 
2 Amber Mykoserocin  |  ISK 2 500,00 

我想在列中查找匹配项A,然后从列中提取相邻的值B

答案1

您的范围不正确。请尝试以下操作:

=VLOOKUP(B2;TypeID!$A$2:$B$8999;2;FALSE)

答案2

=VLOOKUP(B2;TypeID!A:B,2;FALSE) 您不想在 v 查找中使用 $,您需要相对引用而不是绝对引用。如果数据发生变化,选择列会更好,您不必返回并重新执行公式。

如果您是 V-lookup 新手,使用公式框并单击要引用的单元格和范围会很有帮助,以确保您选择了正确的内容,列号更加棘手,但您可以使用显示列号来查看它是什么。

答案3

使用绝对寻址绝对没有问题,只要它是一组正确的地址来形成范围即可。您的陈述中没有任何迹象表明情况并非如此,因此没有任何问题,也不会导致您的公式失败。

当然,第一个关于为什么会出现错误的答案是正确的。引用错误意味着你的引用有问题。没有别的。困难的根源正如所述:查找范围与你希望返回的列不匹配。Excel 无法返回单列范围的第二列。

但是,一旦修复,您就会遇到 NA 错误。这意味着没有匹配项。(当然,它可以意味着很多事情,但本质上是这样的,但在查找上下文中,它意味着没有匹配项。)

所以…… NO MATTER WHAT,您在查找中的输入确实与NOT NOT NOT查找范围的任何第一列相匹配。要解决这个问题,您必须超越寻找差异的不干预方法:不再依赖“如果我询问它们是否相同,我会得到 TRUE 吗?”和“类型是否匹配?”他们为您提供了他们所能提供的最佳帮助,但这还不够。

完全披露:使用您提供的两行数据和正确的查找范围,VLOOKUP()很高兴为我提供正确的结果。

自己尝试一下,但要有所不同。对于查找值,选择 $A2:$A8999 中的任何条目并将其粘贴到 B2 中。这样你就知道你正在查找的东西一定会成功,只要公式写得正确。它对我有用,因为我就是这么做的。我本来想尝试真正的源数据,但没有提供。

所以,既然您亲眼看到它有效,您就可以不再认为公式错误,而去解决数据不匹配的问题。

仔细检查数据。将查找值粘贴到某个单元格中,并将其明显匹配的值粘贴到其下方的单元格中。它们看起来有什么不同吗?没有,好吧,无论如何,那都是唾手可得的成果。选择第一个并按 F2,然后按 Ctrl-Home。现在移动光标,小心谨慎 — — 不要像机关枪一样朝它移动,用右箭头键非常仔细地观察。当你移动时,它是否似乎不动?也许同时轻微闪烁?那么那里有一些东西不占用显示屏的空间。大量数据,当然还有从互联网上抓取的任何内容,都有字符可以帮助源中的显示引擎将其定位在屏幕上。将其从屏幕上抓取时会带走它。

您的查找范围很可能至少部分地填充了此类材料。顺便说一句,“部分”可能导致您的测试成功,但在使用中失败,因为使用了更多示例。避免“动手”填充查找单元格的一种流行方法是复制查找范围的一部分并将它们逐一粘贴到查找单元格中……100% 成功……失败:天哪,他们总是会成功,不是吗?执行第一部分以查看列表,然后在查找单元格中输入内容并查看它们是否有效。在很多情况下,情况并非如此,因为事实证明数据被污染了。

那么,找到类似的东西,即“不动的移动对吗”?好吧,你必须从找到它们的地方删除有问题的字符。或者,如果清理它会很麻烦,那就找到一种方法让它们变得无关紧要。从公式上讲,既然你无法与查找交互……不妨多使用 PageDown。或者 VBA。人们可能也在查看一组很好的查找数据,但从一个可疑的来源(如互联网)获取查找值。无论它来自哪一半,还是两者兼而有之,都必须处理。

我重点关注不显示字符,因为这个问题很常见。可能还有其他困难,但我敢打赌这一个是。

如果要清理的数据基本上都是按字母顺序排列的,那么清理这些数据的一种方法是使用MID(A1,SEQUENCE(1,LEN(A1)),1)一次检查一个字符。使用IF()测试来检查字符的UNICODE()值是否在可接受的范围内。这可以通过多种方式完成,包括构建一个查找表,并用可接受的字符填充。(如果是这样,您将从所有明显的字符开始,并在报告失败时添加更多字符,表明需要添加它们。很糟糕,但在跳过范围内的字符时要容易得多:例如,您需要字符 100-103,而不是 104、105-106,而不是 107 或 108、109-134,而不是 135-143,等等。但通常,只要一个简单的 unicode 字符在范围内,或者不在范围内,就足够了。然后使用UNICHAR()将其返回为字符(如果成功),如果没有成功,则使用“”,并将TEXTJOIN()其全部重新组合在一起。

实际上,您可以同时对输入值和查找值执行此操作。现在我们有了,这尤其容易做到,也更容易查看LET()

这样就无需清理数据,您知道,还会对偶尔发生的事件提出警告等等。所有这些背后的简单事实是,人们希望不必亲自动手,只需使用公式,一切就都有效。这不是现实世界。“但它应该有效!”可能是一种常见的哀叹,但我们还没有做到这一点。就此而言,一旦我们做到了,你的工作就不再涉及这一点了,所以……亲自动手,成功就在眼前。

最后一点:如果没有真实事物的屏幕截图,或者没有从电子表格中得出的完整真实数据,那么就无法走得更远。因此,我提供了上述公式的“操作方法”,而不是确切的公式。

相关内容