Table of contents
你的VLOOKUP是否拉出了错误的数据,或者你根本无法让它工作? 本教程告诉你如何快速修复常见的VLOOKUP错误,并克服其主要限制。
在之前的几篇文章中,我们探讨了Excel VLOOKUP函数的不同方面。 如果你一直密切关注我们,现在你应该是这方面的专家了:)
然而,许多Excel专家认为VLOOKUP是最复杂的Excel函数之一,这并不是没有道理的。 它有大量的限制,是各种问题和错误的根源。
在这篇文章中,你会发现对#N/A、#NAME和#VALUE等VLOOKUP错误的主要原因的简单解释,以及它们的解决方案和修复方法。 我们将从VLOOKUP不工作的最明显的原因开始,所以按顺序查看以下故障排除步骤可能是一个好主意。
修复VLOOKUP中的#N/A错误
在VLOOKUP公式中,当Excel无法找到一个查询值时,会显示#N/A错误信息(意思是 "不可用")。 这可能有几个原因。
1.查询值拼写错误
首先检查最明显的东西总是一个好主意:)当你在处理由成千上万行组成的真正的大数据集时,或者当在公式中直接输入查找值时,经常会出现错误的打印。
2.#N/A在近似匹配的VLOOKUP中
如果你的公式查找出最接近的匹配,( 范围查询 参数设置为TRUE或省略),#N/A错误可能出现在两种情况下。
- 查询值小于查询数组中最小的值。
- 查询栏没有按升序排序。
3.在完全匹配的VLOOKUP中的#N/A
如果你在搜索完全匹配 ( 范围查询 参数设置为FALSE),当没有找到与查询值完全相等的值时,就会发生#N/A错误。 更多信息,请参阅VLOOKUP精确匹配与近似匹配。
4.查询列不是表格数组的最左列
Excel VLOOKUP最重要的限制之一是它不能向左看。 因此,一个查找列应该始终是 最左栏 在实践中,我们经常忘记这一点,并最终出现#N/A错误。
解决方案 : 如果不可能重组你的数据,使查找列成为最左边的列,你可以同时使用INDEX和MATCH函数作为VLOOKUP的替代。 下面是一个公式例子: INDEX MATCH公式查找左边的值。
5.数字格式化为文本
VLOOKUP公式中另一个常见的#N/A错误是数字格式化为文本,无论是在主表还是查询表中。
这通常发生在你从一些外部数据库导入数据时,或者你在一个数字前打了一个撇号以显示前导零。
以下是将数字格式化为文本的最明显指标。
解决方案。 选择所有有问题的号码,点击错误图标并选择 转换为数字 更多信息,请参见《如何在Excel中把文本转换成数字》。
6.前面或后面的空格
这是导致VLOOKUP #N/A错误的最不明显的原因,因为人的眼睛很难发现这些额外的空格,特别是在处理大数据集时,大部分条目都在滚动下方。
解决方案1:查询值中的额外空格
为了确保你的VLOOKUP公式的正确工作,用TRIM函数包住查询值。
=vlookup(trim(e1), a2:c10, 2, false)
解决方案2:查询栏中有额外的空格
如果在查找列中出现额外的空格,在VLOOKUP中没有简单的方法来避免#N/A错误。 相反,你可以使用INDEX、MATCH和TRIM函数的组合作为数组公式。
=index(b2:b10, match(true, trim(a$2:a$10)=trim(e1), 0)
由于这是一个数组公式,不要忘记按Ctrl + Shift + Enter键来正确完成它(在Excel 365和Excel 2021中,数组是原生的,这也可以作为一个普通公式使用)。
提示:一个快速的替代方法是运行修剪空间工具,它可以在几秒钟内消除查找表和主表中的多余空间,使你的VLOOKUP公式没有错误。
#VALUE!VLOOKUP公式中的错误
一般来说,如果公式中使用的值属于错误的数据类型,Microsoft Excel会显示#VALUE!错误。 就VLOOKUP而言,有两种常见的VALUE!错误来源。
1.查询值超过255个字符
请注意,VLOOKUP不能查询包含超过255个字符的值。 如果你的查询值超过这个限制,将显示#VALUE!错误。
解决方案 :使用INDEX MATCH公式代替。 在我们的案例中,这个公式工作得非常好。
=index(b2:b7, match(true, index(a2:a7= e1, 0), 0))
2.没有提供查找工作簿的完整路径
如果你从另一个工作簿中提取数据,你必须包括它的完整路径。 更准确地说,你必须把工作簿的名称包括扩展名放在[方括号]中,并指定工作表的名称,后面是感叹号。 如果工作簿名称或工作表名称,或两者都包含空格或任何非字母字符,路径必须用单引号括起来。
这里的结构是 表_数组 从另一个工作簿到Vlookup的参数。
'[工作簿名称]工作表名称'!范围
一个真正的公式可能与此类似。
=VLOOKUP($A$2,'[新价格.xls]Sheet1'!$B:$D, 3, FALSE)
上述公式将在Sheet1的B列中搜索A2的值。 新价格 工作簿,并从D列返回一个匹配的值。
如果缺少路径中的任何元素,你的VLOOKUP公式将无法工作,并返回#VALUE错误(除非查找工作簿目前是打开的)。
欲了解更多信息,请参见。
- 如何在Excel中引用另一个工作表或工作簿
- 如何从不同的工作簿中进行Vlookup?
3.参数col_index_num小于1
很难想象有人故意输入一个小于1的数字来指定要返回数值的列。 但如果这个参数是由嵌套在你的VLOOKUP公式中的其他函数返回的,就可能发生。
因此,如果 col_index_num 参数大于1,你的公式也会返回#VALUE!错误。
如果 col_index_num 大于表格数组中的列数,VLOOKUP会产生#REF!错误。
解决VLOOKUP #NAME错误
这是最简单的情况--如果你不小心拼错了函数的名字,就会出现#NAME? 的错误。
解决办法很明显--检查拼写 :)
Excel中VLOOKUP出错的主要原因
除了具有相当复杂的语法外,VLOOKUP可以说比其他任何Excel函数都有更多的局限性。 由于这些局限性,一个看似正确的公式往往会带来与你预期不同的结果。 下面你将找到VLOOKUP失败时几个典型场景的解决方案。
VLOOKUP是不分大小写的
VLOOKUP函数不区分字母的大小写,把小写和大写的字符视为相同。
解决方案 :将VLOOKUP、XLOOKUP或INDEX MATCH与可以匹配文本大小写的EXACT函数结合使用。 你可以在本教程中找到详细的解释和公式示例:在Excel中做大小写敏感的Vlookup的5种方法。
从表中插入或删除了一个新列
遗憾的是,每次当有新的列从查询表中删除或添加到查询表中时,VLOOKUP公式就会停止工作。 这是因为VLOOKUP函数的语法要求定义返回列的索引号。 当有新的列被添加到/从表阵列中删除时,显然该索引号会发生变化。
解决方案 :INDEX MATCH公式又来救场了:)通过INDEX MATCH,你可以单独指定查找和返回范围,所以你可以自由地删除或插入任何你想要的列,而不必担心更新每个相关的公式。
将公式复制到其他单元格时,单元格引用发生变化
标题对问题进行了详尽的解释,对吗?
解决方案 : 始终使用绝对引用(带$符号)来表示。 table_array 参数,如$A$2:$C$100或$A:$C。你可以通过按F4键在不同的参考类型之间快速切换。
VLOOKUP返回第一个找到的值
正如你已经知道的,Excel VLOOKUP返回它找到的第一个值。 然而,你可以强制它带来你想要的第2、3、4或任何其他出现的值。 还有一种方法是获得最后一个匹配或所有找到的匹配。
解决方案 : 公式的例子可以在这里找到。
- VLOOKUP并返回第N次出现的信息
- VLOOKUP多个值
- 用XLOOKUP公式得到最后的匹配结果
为什么我的VLOOKUP对某些单元格有效而对其他单元格无效?
当你的VLOOKUP公式在某些单元格返回正确的数据,而在其他单元格返回#N/A错误时,可能有几个原因导致这种情况发生。
1.表阵列未被锁定
假设你在第2行有这个公式(比如在E2),效果很好。
=vlookup(d2, a2:b10, 2, false)
当复制到第3行时,公式变成了。
=vlookup(d3, a3:b11, 2, false)
因为相对参考是用于 表_数组 所以,如果匹配在第2行,它就不会被发现。
解决方案 :当对一个以上的单元格使用VLOOKUP公式时,应始终 锁定表阵列 带$符号的参考,如$A$2:$B$10。
2.文本值或数据类型不匹配
VLOOKUP失败的另一个常见原因是你的查找值和查找列中的类似值之间的差异。 在某些情况下,这种差异是如此微妙,以至于很难从视觉上发现它。
解决方案 : 当VLOOKUP返回#N/A错误,而你可以清楚地看到查找栏中的查找值,而且显然两者的拼写完全相同时,你首先需要做的是确定问题的根源--公式或源数据。
要想知道这两个数值是相同还是不同,可以用这种方式进行直接比较。
=E1=A4
其中E1是你的查找值,A4是查找栏中的一个相同的值。
如果该公式返回FALSE,这意味着这些值在某种程度上是不同的,尽管它们看起来绝对相似。
如果有 数值 ,最可能的原因是数字被格式化为文本。
如果有 文本值 为了验证这一点,用LEN函数找出两个字符串的总长度。
=LEN(E1)
=LEN(A4)
如果得出的数字不一样(就像下面的截图),那么你就找到了罪魁祸首--多余的空格。
要解决这个问题,要么删除多余的空格,要么使用这个INDEX MATCH TRIM公式作为变通方法。
为什么我的VLOOKUP会拉出错误的数据?
可能有更多的原因导致你的VLOOKUP返回一个错误的值。
- 搜索模式不正确 如果你想要一个精确的匹配,一定要设置 范围查询 默认为 "true",所以如果你省略了这个参数,VLOOKUP将假定你正在寻找一个近似的匹配,并搜索小于查找值的最近值。
- 查询列没有被排序 对于近似匹配的VLOOKUP ( 范围查询 设置为TRUE)才能正常工作,表数组中的第一列必须按升序排序,从最小到最大。
- 查询栏中有重复的内容 如果查询列包含两个或更多的重复值,VLOOKUP将返回第一个发现的匹配值,这可能不是你期望的那个。
- 返回列不正确 仔细检查第三个参数中的索引号 :)
VLOOKUP在两个工作表之间不起作用
首先,需要注意的是,上面讨论的#N/A、#VALUE和#REF错误的常见原因,在从另一个工作表往上看时,可能会引起同样的问题。 如果不是这样的话,请看看下面几点。
- 确保对另一个工作表或不同工作簿的外部引用是正确的。
- 当从另一个工作簿做Vlookup时,该工作簿是 关闭的 此刻,请验证你的公式是否包含关闭工作簿的完整路径。
- 如果VLOOKUP 不能在另一个工作表中选择一个表格阵列 (例如,当你在查找表中突出显示一个范围时,没有任何东西出现在 表_数组 要解决这个问题,只需关闭所有Excel窗口,然后在同一实例中重新打开工作表/工作簿(默认行为)。
如何在Excel中实现无错误的Vlookup
如果你不想用标准的Excel错误符号来吓唬你的用户,你可以显示你自己的用户友好的文本,或者在没有找到任何东西的情况下返回一个空白单元格。 这可以通过使用VLOOKUP的IFERROR或IFNA函数来实现。
捕捉所有错误
在Excel 2007及以后的版本中,你可以使用IFERROR函数来检查VLOOKUP公式的错误,并返回你自己的文本(或一个空字符串),如果 任何错误 被检测到。
比如说。
=IFERROR(VLOOKUP(E1, A2:B10, 2, FALSE), "Oops, something went wrong" )
在Excel 2003和更早的版本中,你可以使用IF ISERROR公式达到同样的目的。
=IF(ISERROR(VLOOKUP(E1, A2:B10, 2, FALSE)), "Oops, something went wrong", VLOOKUP(E1, A2:B10, 2, FALSE)
更多细节,请参见《在Excel中使用IFERROR与VLOOKUP》。
处理#N/A错误
要想只捕获#N/A错误而忽略所有其他错误类型,请使用IFNA函数(在Excel 2013和更高版本)或IF ISNA公式(在所有版本)。
比如说。
=IFNA(VLOOKUP(E1, A2:B10, 2, FALSE), "Oops, no match is found. Please try again!" )
=IF(ISNA(VLOOKUP(E1, A2:B10, 2, FALSE)), "Oops, no match is found. Please try again!", VLOOKUP(E1, A2:B10, 2, FALSE)
今天就讲到这里,希望本教程能帮助你摆脱VLOOKUP错误,让你的公式按你想要的方式工作。