多个VLOOKUP或INDEX MATCH

时间:2015-11-06 12:11:40

标签: excel indexing excel-formula match vlookup

我正在尝试使用INDEX MATCH根据多个条件返回值。有人帮助我达到了一个目的,但我找不到添加其他标准的方法。我现在正在处理的公式是:

=IFERROR(INDEX(DATA!$H$2:$H$2000,SMALL(IF(DATA!$K$2:$K$2000="Yes",ROW(DATA!$A$2:$A$2000)-ROW(DATA!$A$2)+1,""),ROWS(DATA!$A$2:A2))),"")

这将根据标准答案为" YES"从我的数据列表中返回一个人的姓名。

我需要再添加两个条件才能返回更少的结果。这将基于月份和年份,均以数字形式显示在不同的单元格中,即102015。我只想在行中的其他值为"是",102015时返回我的索引列表。

1 个答案:

答案 0 :(得分:1)

如果您了解他们正在尝试做什么,那些增量和行号会不必要地复杂化。

当您填写时,ROWS(DATA!$A$2:A2)只会增加 1,2,3 ...... 。这可以简化为ROW(1:1)。只要您意识到要在 H2:H2000中返回位置,而不是工作表上的实际行号,ROW(DATA!$A$2:$A$2000)-ROW(DATA!$A$2)+1可以简化为ROW($1:$1999)。请注意,所引用的简化引用都不使用工作表名称或列名称。它们根本就没有必要。

此外,使用 15 子功能(AGGREGATE¹ function)并且选项a 6 时,SMALL可以快速处理条件(忽略错误)。通过将任何不匹配的内容转换为#DIV/0!错误,您只剩下匹配的行。

XL2010及更高版本的标准配方:

=IFERROR(INDEX(DATA!$H$2:$H$2000, AGGREGATE(15, 6, ROW($1:$1999)/((DATA!$K$2:$K$2000="Yes")*(DATA!$L$2:$L$2000=10)*(DATA!$M$2:$M$2000=2015)), ROW(1:1))),"")

XL2007及更早版本的标准公式:

=IFERROR(INDEX(DATA!$H$2:$H$2000, SMALL(INDEX(ROW($1:$1999)+((DATA!$K$2:$K$2000<>"Yes")+(DATA!$L$2:$L$2000<>10)+(DATA!$M$2:$M$2000<>2015))*1E+99, , ), ROW(1:1))),"")

¹ Excel 2010引入了AGGREGATE function。早期版本不提供。