Excel数组公式多个条件空string

我有专栏

  • B4(本表B列)= Part#
  • 数据库A =date
  • 数据库C =部件号
  • 数据库AA =文本注释

用下面的公式,我想看看最近的date是非空的注释字段,并返回该值。 如果返回错误,我只想返回一个空string:

=IFERROR(INDEX(Database!AA$2:$AA$5000;MATCH(MAX(IF(""<> Database!$AA$2:$AA$5000;IF(B4=Database!$C$2:$C$5000;Database!$A$2:$A$5000))) &B4;Database!$A$2:$A$5000&Database!$C$2:$C$5000;0));"") 

然而,问题是,如果我只检查最近的date,或者非空单元格,则返回最新的行。 如果,但是我混合这两个条件,我得到空白单元格。

任何人有关如何将这两个条件与数组公式结合起来的想法? (我知道,VBA会使我的生活在这里变得更容易,但是除了自我更新的公式外,我绝不能使用任何东西)

这可以在不使用CSE的情况下使用INDEX和AGGREGATE¹函数来提供循环处理,而不像SUMPRODUCT那样input数组公式。 像数组公式一样,处理的行数应该最小化,以避免计算滞后。

AGGREGATE首先用于根据零件号和非空白注释查找最大date; 一种伪MAXIF的forms。 该值在第二个AGGREGATE中使用,以将行号返回到也与部件号和非空白注释匹配的注释列的INDEX。

以C13作为标准配方,

 =INDEX(AA:AA, AGGREGATE(15, 6, ROW(A$1:INDEX(A:A, MATCH(1E+99,A:A )))/((C:C=B13)*(A:A=AGGREGATE(14, 6, A$1:INDEX(A:A, MATCH(1E+99,A:A ))/((C$1:INDEX(C:C, MATCH(1E+99,A:A ))=B13)*SIGN(LEN(AA$1:INDEX(AA:AA, MATCH(1E+99,A:A ))))), 1))*SIGN(LEN(AA$1:INDEX(AA:AA, MATCH(1E+99,A:A ))))), 1)) 

max_date_two_conditions


¹AGGREGATEfunction是在Excel 2010中引入的。它在早期版本中不可用。

² arrays公式需要用Ctrl + Shift + Enter 来确定。 如果input正确,Excel将花括号包括在公式中(例如{} )。 你不要自己input大括号。 一旦正确input第一个单元格,就可以像其他任何公式一样向下或向右填充或复制它们。 尝试和减less您的全列引用范围更接近代表实际数据的范围。 数组公式将计算周期对数化,所以最好将参考范围缩小到最小。 有关更多信息,请参阅数组公式的示例 。