使用INDEX(MATCH)根据多个条件查找值

时间:2016-07-15 03:58:51

标签: excel excel-formula array-formulas

我正在使用INDEX(MATCH)使用另一个工作表中两个不同单元格的条件在一列中查找值。这是我试图使用的公式:

=INDEX(Sheet1!P:P,MATCH(1,(Sheet1!A:A=Sheet2!C$1)*(Sheet1!B:B=Sheet2!$B2),0))

Sheet1是数组,P列包含我希望公式返回的值。 Sheet1中的列A包含第一个条件的值,Sheet1中的列B包含第二个条件的值。标准在Sheet2的C1和B2中表示。这将随着单元格的复制而改变。谁能看到这个公式中的任何错误?它返回一个"值不适用于公式或函数。"

1 个答案:

答案 0 :(得分:0)

这必须作为数组公式¹输入,因此应将整列参考值减少到最小尺寸,否则您将遇到不必要的计算延迟,因为处理了数十万个空白单元格。

A列中的文字,

=index(Sheet1!$P$1:index(Sheet1!$P:$P, match("zzz", Sheet1!$A:$A)),
   match(1, (Sheet1!$A$1:index(Sheet1!$A:$A, match("zzz", Sheet1!$A:$A))=Sheet2!C$1)*
            (Sheet1!$B$1:index(Sheet1!$B:$B, match("zzz", Sheet1!$A:$A))=Sheet2!$B2), 0))

A列中的数字或日期,

=index(Sheet1!$P$1:index(Sheet1!$P:$P, match(1e99, Sheet1!$A:$A)),
   match(1, (Sheet1!$A$1:index(Sheet1!$A:$A, match(1e99, Sheet1!$A:$A))=Sheet2!C$1)*
            (Sheet1!$B$1:index(Sheet1!$B:$B, match(1e99, Sheet1!$A:$A))=Sheet2!$B2), 0))

您在原始Sheet1范围引用中没有绝对引用锚点(例如$),但是您为Sheet2中的条件设置它们的方式让我相信您需要它们用于行和列

如果第1行中有列标题标签,请将A1,B1和P1更改为A2,B2和P2。

¹数组公式需要用 Ctrl + Shift + Enter↵完成。如果输入正确,Excel将公式包装在大括号中(例如 {} )。您不要自己键入大括号。一旦正确进入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试并减少对更接近表示实际数据范围的范围的全列引用。数组公式以对数方式计算计算周期,因此将参考范围缩小到最小值是一种好习惯。有关详细信息,请参阅Guidelines and examples of array formulas