【问题标题】:Excel Array Formula Multiple Conditions Empty StringExcel 数组公式多个条件空字符串
【发布时间】:2016-09-03 16:24:39
【问题描述】:

我有专栏

  • B4(此工作表 B 列)= 部件号
  • 数据库 A = 日期
  • 数据库 C = 部件号
  • 数据库 AA = 文本注释

通过以下公式,我想查找最近日期不为空的评论字段并返回该值。如果返回错误,我只想返回一个空字符串:

     =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));"")

但问题是,如果我只检查最近的日期或非空单元格,则会返回最新的行。但是,如果我混合这两种条件,我会得到空白单元格。

有人知道如何将这两个条件与数组公式结合起来吗? (我知道,VBA 会让我的生活更轻松,但我不能使用任何东西,只能使用自更新公式)

【问题讨论】:

  • 这必须是一个数组公式。这些公式必须用 [Corntol]+[Shift]+[Enter] 确认。在此之后,它们出现在大括号中。这样做了吗?

标签: arrays excel conditional-statements array-formulas


【解决方案1】:

这可以在没有 CSE 的情况下完成,使用 INDEXAGGREGATE¹ function 提供循环处理,就像 SUMPRODUCT 在不输入数组公式的情况下所做的那样。和数组公式一样,应该尽量减少处理的行数,避免计算滞后。

AGGREGATE首先用于根据零件编号和非空白注释查找最大日期;一种伪 MAXIF 形式。该值用于第二个 AGGREGATE 以将行号返回到 cmets 列的索引,该列也与部件号和非空白注释匹配。

在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))


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

² 数组公式需要用Ctrl+Shift+Enter↵来完成。如果输入正确,Excel 会将公式用大括号括起来(例如 {})。你不用自己输入大括号。一旦正确输入第一个单元格,它们就可以像任何其他公式一样被填充或向下或向右复制。尝试将全列引用减少到更接近代表实际数据范围的范围。数组公式以对数方式消耗计算周期,因此最好将引用范围缩小到最小值。请参阅Guidelines and examples of array formulas 了解更多信息。

【讨论】:

  • 道歉;我最初并没有补偿非空白 cmets。
  • 我不知道是不是只有我一个人,但对我来说那些AGGREGATE 公式看起来很乱,很难理解。甚至比数组公式等价物还要难。在我看来并不是真正的进步。
  • 目前正在尝试解决这个问题,我会及时通知您。已经感谢您的输入
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
相关资源
最近更新 更多