Excel 数组公式多条件空字符串
Excel Array Formula Multiple Conditions Empty String
我有专栏
- B4(此 Sheet B 列)= 部件号
- 数据库 A = 日期
- 数据库 C = 部件号
- 数据库AA =文字评论
使用以下公式,我想查找最近日期不为空且 return 该值的评论字段。如果错误是 returned,我只想要一个空字符串 returned:
=IFERROR(INDEX(Database!AA:$AA00;MATCH(MAX(IF(""<>
Database!$AA:$AA00;IF(B4=Database!$C:$C00;Database!$A:$A00)))
&B4;Database!$A:$A00&Database!$C:$C00;0));"")
但是问题是,如果我只检查最近的日期或非空单元格,则最新行是 returned。但是,如果我混合使用这两种情况,我会得到空白单元格。
有人知道如何将这两个条件与数组公式结合起来吗? (我知道,VBA 会让我在这里的生活更轻松,但我不能使用任何东西,只能使用自我更新的公式)
这可以在没有 CSE 的情况下完成,使用 INDEX with the AGGREGATE¹ function providing the cyclic processing much as SUMPRODUCT 无需输入数组公式。与数组公式一样,应尽量减少处理的行数以避免计算延迟。
AGGREGATE首先用于根据零件号和非空白注释查找最大日期;伪 MAXIF 的一种形式。该值在第二个 AGGREGATE 中使用 return 行号到注释列的索引,该行号也与部件号和非空白注释匹配。
以C13为标准公式,
=INDEX(AA:AA, AGGREGATE(15, 6, ROW(A:INDEX(A:A, MATCH(1E+99,A:A )))/((C:C=B13)*(A:A=AGGREGATE(14, 6, A:INDEX(A:A, MATCH(1E+99,A:A ))/((C:INDEX(C:C, MATCH(1E+99,A:A ))=B13)*SIGN(LEN(AA:INDEX(AA:AA, MATCH(1E+99,A:A ))))), 1))*SIGN(LEN(AA:INDEX(AA:AA, MATCH(1E+99,A:A ))))), 1))
¹ AGGREGATE function 是在 Excel 2010 中引入的。它在早期版本中不可用。
² 数组公式需要用Ctrl+Shift+Enter↵。如果输入正确,Excel 会将公式括在大括号中(例如 { 和 })。您不会自己输入大括号。一旦正确输入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试将整列引用减少到更接近代表实际数据范围的范围。数组公式以对数方式消耗计算周期,因此最好将参考范围缩小到最小值。有关详细信息,请参阅 Guidelines and examples of array formulas。
我有专栏
- B4(此 Sheet B 列)= 部件号
- 数据库 A = 日期
- 数据库 C = 部件号
- 数据库AA =文字评论
使用以下公式,我想查找最近日期不为空且 return 该值的评论字段。如果错误是 returned,我只想要一个空字符串 returned:
=IFERROR(INDEX(Database!AA:$AA00;MATCH(MAX(IF(""<>
Database!$AA:$AA00;IF(B4=Database!$C:$C00;Database!$A:$A00)))
&B4;Database!$A:$A00&Database!$C:$C00;0));"")
但是问题是,如果我只检查最近的日期或非空单元格,则最新行是 returned。但是,如果我混合使用这两种情况,我会得到空白单元格。
有人知道如何将这两个条件与数组公式结合起来吗? (我知道,VBA 会让我在这里的生活更轻松,但我不能使用任何东西,只能使用自我更新的公式)
这可以在没有 CSE 的情况下完成,使用 INDEX with the AGGREGATE¹ function providing the cyclic processing much as SUMPRODUCT 无需输入数组公式。与数组公式一样,应尽量减少处理的行数以避免计算延迟。
AGGREGATE首先用于根据零件号和非空白注释查找最大日期;伪 MAXIF 的一种形式。该值在第二个 AGGREGATE 中使用 return 行号到注释列的索引,该行号也与部件号和非空白注释匹配。
以C13为标准公式,
=INDEX(AA:AA, AGGREGATE(15, 6, ROW(A:INDEX(A:A, MATCH(1E+99,A:A )))/((C:C=B13)*(A:A=AGGREGATE(14, 6, A:INDEX(A:A, MATCH(1E+99,A:A ))/((C:INDEX(C:C, MATCH(1E+99,A:A ))=B13)*SIGN(LEN(AA:INDEX(AA:AA, MATCH(1E+99,A:A ))))), 1))*SIGN(LEN(AA:INDEX(AA:AA, MATCH(1E+99,A:A ))))), 1))
¹ AGGREGATE function 是在 Excel 2010 中引入的。它在早期版本中不可用。
² 数组公式需要用Ctrl+Shift+Enter↵。如果输入正确,Excel 会将公式括在大括号中(例如 { 和 })。您不会自己输入大括号。一旦正确输入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试将整列引用减少到更接近代表实际数据范围的范围。数组公式以对数方式消耗计算周期,因此最好将参考范围缩小到最小值。有关详细信息,请参阅 Guidelines and examples of array formulas。