我有一个包含 2008 年、2012 年和 2016 年奥运会数据的 excel 文件。我想将工作表 1 中的数据集中的事件查找到 VLOOKUP 工作表中的表格数组中,以确定该事件是团队导向还是个人导向。但是,Vlookup 值没有正确对应,甚至产生了一些 N/A 值。
我尝试查找多个问题根源,但无法确定问题原因。如能就我的问题提供帮助,我将不胜感激。请查看附件中我的 Excel 工作簿链接。
谢谢
答案1
您的事件源列表未排序。VLOOKUP 力求高效,因此如果它找到其所寻找内容之后的条目,它会放弃并使用它找到的最后一个值。
想象一下在电话簿中查找“newt335”。如果我找到“Newton”,我知道我已经找得太多了,所以我使用我找到的最后一个条目“newt”。这不是正确的答案...
因此,您需要告诉 Excel 数据未排序,这样它每次都会进行详尽的精确匹配搜索。这是 VLOOKUP 的第四个可选参数,我发现很多人像巫术一样使用它,却不知道为什么(“您必须输入 FALSE,否则它不起作用。没人知道为什么!”)。此外,根据经验,不要在查询中包含标题,从第一行数据开始:
=VLOOKUP(N2, VLOOKUP!$A$2:$B$327, 2, FALSE)
将“错误”视为“这些数据是否已排序,我会接受近似匹配吗?”这个问题的答案。
使此操作更可靠的其他一些要点:将源查找列表转换为实际表格。选择列表中的任意单元格,然后按 Ctrl+T。检查对话框是否显示列表的完整范围,以及是否选中“我的数据有标题”(因为您的标题格式不同,所以它会自动选择)。在 TableTool > Design 功能区左侧,更改表名,例如“EventTypes”(不允许有空格)。对主列表执行相同操作,例如将其命名为“Events”。现在将您的 VLOOKUP 更改为以下内容:
=VLOOKUP([@Event],[EventTypes],2,FALSE)
看看这是否更加人性化和可读?这也意味着您不必担心是否需要向 EventTypes 表添加更多事件 - Excel 每次都会使用整个表,而不必将 $B$327 修复为 $B$328、329 等。
为了获得更好的结果,并学习一些未来更灵活的东西,将查找和返回值分为 MATCH 和 INDEX:
=INDEX(EventTypes[Event_Type],MATCH([@Event],EventTypes[unique(olympic$Event)],0))
(此处的零与上面的 FALSE 的作用相同,强制精确匹配)
答案2
您当前的公式正在进行近似搜索。将设置range_lookup
为FALSE
以获得精确匹配。您的公式应该是:
=VLOOKUP(N18,VLOOKUP!$A$1:$B$327,2,FALSE)