返回所有可能的值而不是VLOOKUP

时间:2016-03-25 01:02:44

标签: excel excel-formula excel-2010 excel-2007

所以我查阅了有关如何执行此操作的教程,我仍然在努力,所以我可以使用一些专家帮助。我知道它涉及一个非常复杂的嵌套公式,包括SMALLROWINDEX等等......

所以这里有两个截图,提供了我正在寻找的样本。在现实中有超过1000行,但这使你们更容易。

所以这是我的第一个例子,让我们调用这个Sheet1!:

image

代码,ID_1和ID_2。因此,您可以看到(并且只关注A2中的输入),链接的工作簿中将有两个单独的ID。那张表,或者至少是它的一小部分,看起来像这样:

image

在第一列中,我们看到了我们正在寻找的代码(这是我们在第一个代码的A2中所拥有的代码),每个代码都有不同的ID。因此,我相信你现在可以告诉我,我正在寻找一个允许我在第一张表中返回ID_1和ID_2中的值的公式。

我已经在这里待了一个小时而且我很难过,所以我非常感谢你提供的任何帮助!

2 个答案:

答案 0 :(得分:0)

如果两个ID在第二个列表中是连续的,请尝试:

 =index('workbookname'SheetName!columnrangeofserialnumbers,match(A2,'workbookname'Sheetname!columnrangeofIDs,0))

假设您的其他工作簿名为Serials,并且所有信息都在sheet1上,您将在B2中输入以下内容:

 =index('serials'sheet1!$B$2:$B$1000,match(A2,'serials'sheet1!$B$2:$B$1000,0))
C2中的

输入以下内容(假设id将连续显示)

 =index('serials'sheet1!$B$2:$B$1000,match(A2,'serials'sheet1!$B$2:$B$1000,0)+1)

这只有在我知道其他工作簿开放的情况下才有效,并且理解这两个ID将在列表中连续列出。

答案 1 :(得分:0)

如果没有连续列出id,这是一个更通用的代码:显然我已经做了这个作为一个例子来接受一个更一般的情况,其中id出现在整个第二个数据集的任何地方,并且可能有几个。< / p>

IFERROR(INDEX($V$2:$V$15, SMALL(IF($U$2:$U$15=$M2, ROW($U$2:$U$15), FALSE), COLUMNS($N2:N2))-ROW($V$1), 1), "")

必须先使用 Ctrl-Shift-Enter 输入此公式,然后再向上和向下复制!注意所有绝对和相对引用/锁定($符号)

Page set-up with Array Formula

构建这样一个公式的逻辑步骤:

1)我们使用IF函数来测试U列中的值是否与M列中的值匹配。

2)在'value-if-true'参数中,我们将在U列中获得相应的行数值。这些数字将在稍后的SMALL函数中提供。

3)在value-if-false部分,我们只返回false,因为稍后将在SMALL函数中用作非数字

部分中的3个步骤:IF($U$2:$U$15=$M2, ROW($U$2:$U$15), FALSE)

4)我们现在有一个混合行号和FALSE值的数组,我们希望将它们提供给INDEX函数,以便简单地获得第V列(我们的第二个数据集)中的相应值。但是,由于我们希望为每个代码检索不同的行匹配,我们必须使用SMALL函数将它们从混合数组中删除。

5)使用我们的列作为增量器,我们将SMALL函数应用于具有不同 k 参数的数组。我们使用COLUMNS函数(请仔细注意不同的$符号用法),这样当我们拖动公式时,列数递增:COLUMNS($N2:N2) - 当我们拖动时,给出K值为1,2,3,4从列N到列Q的公式。请注意,当按数组查看数组中的值时,SMALL函数忽略FALSE值很有用。

enter image description here

6)有一个调整来说明行是相对于'Ids'范围的事实,我们将把它输入到INDEX函数中以检索不同的id。 SMALL(IF($U$2:$U$15=$M2, ROW($U$2:$U$15), FALSE), COLUMNS($N2:N2))-ROW($V$1)

如果我们将整个列V用作INDEX函数中的查找数组参数,则可以避免这种情况,但这是另一种方式......

7)现在可以将此结果值传递给INDEX函数以获取各种ID。我在函数中放入的column_num参数1在单列查找数组中不是必需的,但是为了完整性。

8)然后将整个构造包装在IFERROR函数中,如果没有匹配则给出一个空字符串,但有些人可能希望在那里有错误输出...