【问题标题】:Excel - VLOOKUP with multiple criteriaExcel - 具有多个条件的 VLOOKUP
【发布时间】:2015-11-19 20:08:27
【问题描述】:

我目前正在尝试分析由 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 

【问题讨论】:

    标签: excel vlookup


    【解决方案1】:

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

    我不得不说,我倾向于使用 INDEX 和 MATCH 而不是 VLOOKUP,所以我在这个解决方案中使用了组合(加上 OFFSET)。

    希望这是您的想法……请原谅 John Smith 的同事的名字。我只需要快速想出一些东西来确保它适用于更多的员工和一个重新洗牌的设备清单。 :D

    【讨论】:

    • 完美!!正是我需要的。非常感谢!
    • 奇数。我刚试了一下,它奏效了。也许再试一次,看看我使用链接是否重新激活了它。如果没有,我会再找一个主机。
    【解决方案2】:

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

    我不确定解决多个退货或多个条件是否更重要,但构建一个 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 - 所有资产:

          

    Sheet1 - PC 列表

          

    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 以获取第一个 [Serial ID]。使用公式栏(不要复制单元格)将公式从 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 以获取第二个 [Serial ID]。

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


    ¹ AGGREGATE function 是在 Excel 2010 中引入的。它在早期版本中不可用。
    ² IFERROR function 是在 Excel 2007 中引入的。它在早期版本中不可用。

    Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint 可以保持与早期 Excel 版本的兼容性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多