Excel - 具有多个条件的VLOOKUP

时间:2014-02-27 23:54:36

标签: 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标签号以找到序列号。

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

E.G

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 

2 个答案:

答案 0 :(得分:1)

好的,我想不出如何输入我的解决方案,所以这是一个示例文件:https://app.box.com/s/4j79fu7vd93u0dc1rltg

我不得不说,我更倾向于使用INDEX和MATCH来实现VLOOKUP,所以我使用了这个解决方案的组合(加上OFFSET)。

希望这是你的想法......请原谅John Smith的同事的名字。我只需要快速拿出一些东西来确保它能够与更多的员工和洗牌的设备清单一起工作。 :d

答案 1 :(得分:1)

接受答案中的链接显然已过期,所以也许是时候更新此帖子了。

我不确定解决多个返回或多个条件是否更为重要,但使用提供匹配行号的较新INDEX formula构建AGGREGATE¹ function可以轻松处理这两个。

AGGREGATE函数产生的循环计算与SUMPRODUCT function一样,但在应用完整列引用时也会遇到计算延迟。因此,所有查找范围都将通过选择一列并确定数据的开头和结尾来动态构建。此列的结束行将用于所有其他查找列作为其自己列的结束点。

Sheet2上的主查阅列(参见下面的sample data image)是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 sub-function(例如 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 function来实现的。 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!错误的分母相乘。

¹ Excel 2010引入了AGGREGATE function。在早期版本中不可用。
² Excel 2007引入了IFERROR function。早期版本不提供。

可以使用Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint

维护与早期Excel版本的兼容性