用于根据日期条件返回匹配的数组公式

时间:2015-05-19 20:18:22

标签: arrays excel

当我的数据存储在第2行及以下时,以下代码对我很有用。但如果我的数组范围是从第6行及以下,我该如何调整公式? 提前致谢

A       B
Test1   18/05/2015
Test2   15/05/2015
Test3   19/05/1991
Test4   18/05/2013

命名范围: Array_Range = $ A $ 6:$ B $ 9 Health_Check_Date = B $ 6 $:$ B $ 9

样本数据(从第5行开始)

{{1}}

1 个答案:

答案 0 :(得分:0)

当您的数据在第2行开始时,实际上您向下偏移了一行。将数据向下移动到第6行开始时,此问题被放大。这是由于返回工作表行和行位置命名范围的不同。如果 Health_Check_Date 引用B6:B9,那么在第一行的匹配周围包裹ROW function将返回 6 ,而不是 1 < / em>的。您需要通过 Health_Check_Date 的起始行调整hte return。

您的公式旨在将第一,第二,第三等匹配返回到连续行,但您已使用ROW($1:$1)中的绝对地址将其锁定。我已经删除了这个限制。

EDATE function是一种更有效的方式,可以在今天减少几年。

IFERROR function通过评估公式减少了IF(ISERROR(...所需公式的倍增,如果公式的结果不符合,则返回默认值。

Small Index Array_Range

D1中的数组公式

=IFERROR(INDEX(Array_Range, SMALL(IF(Health_Check_Date<EDATE(TODAY(), -24), ROW(Health_Check_Date)-ROW(INDEX(Health_Check_Date, 1, 1))+1), ROW(1:1)), 1), "")

如果需要丢弃 Health_Check_Date 中的空白单元格,请在忽略零长度的作品中叠加额外的IF

=IFERROR(INDEX(Array_Range, SMALL(IF(LEN(Health_Check_Date), IF(Health_Check_Date<EDATE(TODAY(), -24), ROW(Health_Check_Date)-ROW(INDEX(Health_Check_Date, 1, 1))+1)), ROW(1:1)), 1), "")

数组公式需要用 Ctrl + Shift + Enter↵完成(但你知道!)。填写后续退货。