如果在同一行找到两个值,则 Excel vlookup 返回值

如果在同一行找到两个值,则 Excel vlookup 返回值

我有一本有两张纸的工作簿。

我想使用 vlookup 来查看一张工作表上的一行中的两个单元格是否存在于另一张工作表的一行中。

工作表1: 在此处输入图片描述

第 2 页: 在此处输入图片描述

目前我在 sheet2 中使用 VLOOKUP 来查看 ID 值是否存在于任何地方,如果不存在,则返回“未找到”的值

在此处输入图片描述

我想扩展此 VLOOKUP 函数,以便查看另一列。它必须查看 ID 和 Favorite Color 是否存在于同一行中,如果不存在则返回错误。

当前功能为:=IFERROR(VLOOKUP(A3,sheet1!$A$1:$E$11,1,FALSE),"NOT FOUND")

我尝试添加另一个值进行查找,如下所示: =IFERROR(VLOOKUP(A3**&"|"&D3**,sheet1!$A$1:$E$11,1,FALSE),"NOT FOUND")

但那没有用。

关于如何做到这一点有什么想法吗?

非常感谢!

答案1

为了做到这一点VLOOKUP,您需要:

  1. 连接查找值(第一个参数)
  2. 连接查找表中的相同列

您几乎已经正确回答了第一个问题,但我不明白为什么您在其中添加了这些星号。

对于数字 2,您需要在表的左侧添加一个关键列(必须在左侧),该关键列将 ID 与 Sheet1 上的收藏颜色连接起来,方式与您在第一个参数中连接它的方式相同(即用管道分隔)。

例如:

在此处输入图片描述

当你有了这个,你的公式将是:

=IFERROR(VLOOKUP($A3&"|"&$D3,sheet1!$A$1:$F$11,2,FALSE),"NOT FOUND")

请注意,由于您添加了一列,您的数据范围从 A 列到 F 列。我已将第二个参数更改为VLOOKUP2,以便它返回 ID。

答案2

我没有 Excel 2010,因此我将提供一个我认为有效的解决方案,然后是一个肯定有效的解决方案。

=VLOOKUP(A2&"|"&D2,CHOOSE({1,2},Sheet1!$A$2:$A$11&"|"&Sheet1!$D$2:$D$11,Sheet1!$A$2:$A$11),2,FALSE)

这里的想法是在您的公式中(而不是物理上)构建一个两列表,然后使用第一列进行查找,第二列进行查找。第 1 列是两列 A 和 D 的串联,将作为您的查找列。这是部分Sheet1!$A$2:$A$11&"|"&Sheet1!$D$2:$D$11。第二列在公式中紧随其后。

您可以使用辅助列来物理构建表格。我非常喜欢它们,但我控制我处理的电子表格,而不是相反。这不是通常的情况。相反,一个人必须使用其他人控制的电子表格。但辅助列可以位于与其使用位置完全不同的页面上。它不必放在现有内容旁边,将内容推来推去。对于您来说,您可以添加一整页只是为了拥有这个辅助列和原始 ID 列的副本,这样就可以在某个不会冒犯任何人的地方拥有整个辅助表。但是...

以上代码创建了您需要的双列,并将 ID 列收集到事物中。但……它不能,不是完全靠自己。要将它们变成真正的范围(INDIRECT()在这种情况下甚至无法做到),您可以使用名为 的非常奇怪的家伙CHOOSE()

显然,MS 没有走惯常的偷懒捷径,即我们都熟悉的“谁会需要超过 9 个字符的字符串”的限制、“做你想到的第一件事,之后再也不去想”的编程。它工作得相当广泛,几乎CHOOSE()没有限制,只有一些奇怪的效果。(这些奇怪的效果在这里并不重要。)因此,您可以使用它来选择所需的列,并使用“数组常量”样式列出它们,将它们按您希望的任何顺序排列,并且像 一样,INDEX()如果您愿意,甚至可以让它们出现多次。

就您而言,不需要做任何复杂的操作。您在公式中构建一个列,然后简单地引用第二个列的现有范围。因此,简单的{1,2}方法非常有效。但是,如果您遇到了通常遇到的情况,需要“向左看”,您可以使用它CHOOSE()来简单地更改处理两列的顺序,然后立即得到一个简单的“向右看” VLOOKUP()

因此,公式中的第一部分VLOOKUP()是。接下来是查找范围并处理该范围。“2”确保您只返回 ID,“FALSE”确保您只获得精确匹配。A2&"|"&D2CHOOSE()

请注意,由于您希望返回的是两列查找值的一部分,因此您可以只返回该值并使用LEFT()长度FIND()-1(“查找” “|”)。

所以,现在只需将公式复制到 F 列的表格中,您就会得到结果。如果您愿意,可以对不匹配的内容进行美化(它会返回错误#N/A,因此很简单IFERROR()...)。

如果需要,您可能可以将其用作数组函数。请使用该{CSE}方法。

由于我复制并粘贴了列,上面的方法对我来说是可行的。如果出于某种原因它对你不起作用,那可能与构建两列连接有关。无论如何,下面的方法都应该可以实现这一点。(唉……不过,套用约翰·林戈的话,“对于某些‘应该’值……”当然。这仍然是 Excel……)

=VLOOKUP(A2&"|"&D2,CHOOSE({1,2},INDEX(Sheet1!$A$2:$E$11,ROW(1:10),1)&"|"&INDEX(Sheet1!$A$2:$E$11,ROW(1:10),4),Sheet1!$A$2:$A$11),2,FALSE)

它用于INDEX()构建连接,以防直接寻址在 Excel 2010 中无法完成工作。INDEX()是那些永远不会失败的函数之一,只要您仔细考虑它应该做什么。但实际上,它通常不会在数组/非数组情况下引发怪癖,因此如果它似乎可以做某事,那么它是一个非常可靠的选择。否则,方法都是一样的。

相关内容