我正在尝试使用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"从我的数据列表中返回一个人的姓名。
我需要再添加两个条件才能返回更少的结果。这将基于月份和年份,均以数字形式显示在不同的单元格中,即10
和2015
。我只想在行中的其他值为"是",10
和2015
时返回我的索引列表。
答案 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。早期版本不提供。