Excel – 具有多个条件的VLOOKUP

我目前正在尝试分析由PC和监视器组成的资产清单电子表格。 我目前遇到的问题是将PC与两台显示器联系起来。

例如电子表格如下所示:

Sheet1 – PC的列表

Monitor 1 Monitor 2 Employee Name PC Tag Number Serial ID MonTag1 Tag Serial ID MonTag2 Tag Serial ID John Smith ABC123456 123456789 ABC123423 5465614 

第2页 – 所有资产:

 Parent Asset (Tag) Tag Number Serial ID Description ABC123456 ABC123423 5465614 24" Monitor ABC123456 XYZ123424 5456415 24" Monitor 

家长资产(标签)=计算机条码

我已经按照sheet2完成了PC标签号单元的VLOOKUP查找连接到PC上的监视器的标签号。 然后,我在sheet2上做了一个VLOOKUP标签号码来查找序列号。

我现在需要为监视器2做另一个VLOOKUP信息,我需要公式查找类似于第一个VLOOKUP的父资源,而不是在sheet2中给出第二个监视器的值(XYZ123424)。

例如

 Monitor 1 Monitor 2 Employee Name PC Tag Number Serial ID MonTag1 Tag Serial ID MonTag2 Tag Serial ID John Smith ABC123456 123456789 ABC123423 5465614 XYZ123424 5456415 

好吧,我想不出如何input我的解决scheme,所以这里是一个示例文件: https : //app.box.com/s/4j79fu7vd93u0dc1rltg

我不得不说,我倾向于使用INDEX和MATCH来VLOOKUP,所以组合(加上OFFSET)我用这个解决scheme。

希望这是你的想法…请原谅约翰·史密斯的同事的名字。 我只是想快速地想出一些办法来确保它能和更多的员工以及洗牌设备清单一起工作。 :d

被接受的答案中的链接显然已经过期,所以也许是时候更新这个post了。

我不确定寻址多个回报还是多个准则更重要,但是用提供匹配行号的较新的AGGREGATE¹函数构build一个INDEX公式可以很容易地处理两者。

AGGREGATE函数与SUMPRODUCT函数一样产生循环计算,但是在应用全列参考时也会遇到计算滞后。 出于这个原因,所有查找范围将通过挑选一列和确定数据的开始和结束来dynamic地构build。 此列的结束行将用于所有其他查找列作为其自己的列的结束点。

Sheet2上的主查找列(请参见下面的示例数据图像 )是A列; 例如[父资产标签]。 此列中的值是基于文本的,因此以下内容将决定数据的范围。

 Sheet2!$A$1:INDEX(Sheet2!$A:$A, MATCH("zzz", Sheet2!$A:$A)) 

如果[父资产标签]列是数字,则该公式将是,

 Sheet2!$A$1:INDEX(Sheet2!$A:$A, MATCH(1E+99, Sheet2!$A:$A)) 

第2页 – 所有资产:

vlookup_multiple_criteria_data

Sheet1 – PC的列表

vlookup_multiple_criteria_formulas

AGGREGATE函数使用SMALL子函数 (例如15 )将适当的行号返回给INDEX。 要返回第二个,第三个等匹配的行,所有需要的是提高SMALL的k参数。

匹配行号通过强制任何不匹配的行号进入#DIV/0! 错误状态和6选项忽略错误。

Sheet1 – 公式

A2中的公式是,

 =IFERROR(INDEX(Sheet2!$D:$D, AGGREGATE(15, 6, ROW(Sheet2!$A$1:INDEX(Sheet2!$A:$A, MATCH("zzz", Sheet2!$A:$A)))/(Sheet2!$A$1:INDEX(Sheet2!$A:$A, MATCH("zzz", Sheet2!$A:$A))=$B6), COLUMN(A:A))), "") 

填写右侧返回第二个显示器列表。 这是通过使用COLUMN函数来实现的。 COLUMN(A:A)返回1,但是右边填充为COLUMN(B:B) ,返回2 。 这提供了SMALL的k参数。

D6中的公式是,

 =IFERROR(INDEX(Sheet2!B:B, AGGREGATE(15, 6, ROW(Sheet2!$A$1:INDEX(Sheet2!$A:$A, MATCH("zzz", Sheet2!$A:$A)))/(Sheet2!$A$1:INDEX(Sheet2!$A:$A, MATCH("zzz", Sheet2!$A:$A))=$B6), 1)), "") 

这将检索第一个[MonTag1标签]。 向右填入E6以获取第一个[序列号]。 使用公式栏从D6复制公式(不要复制单元格)到F6作为,

 =INDEX(Sheet2!B:B, AGGREGATE(15, 6, ROW(Sheet2!A$1:INDEX(Sheet2!A:A, MATCH("zzz", Sheet2!A:A)))/(Sheet2!A$1:INDEX(Sheet2!A:A, MATCH("zzz", Sheet2!A:A))=$B6), 2)) 

k参数更改为2 。 这将检索第二个监视器的[MonTag1标签]。 向右填入G6以获取第二个[序列号]。

没有什么。 可以添加多个条件列作为TRUE / FALSE语句乘以产生#DIV/0!的分母#DIV/0! 错误。


¹AGGREGATEfunction是在Excel 2010中引入的。它在早期版本中不可用。
²IFERROR函数是在Excel 2007中引入的,它在早期版本中不可用。

与早期的Excel版本的兼容性可以与Word,Excel和PowerPoint的Microsoft Office兼容包保持一致。