查找记录子集的最大日期

时间:2014-05-12 13:50:45

标签: excel max vlookup

不幸的是我必须在Excel中执行此操作。

我需要在两个日期的范围内找到每个ID代码的最新日期。我可以分别做每一点,但我似乎无法把它们放在一起得到我需要的东西。

对于以下示例数据:

a   21/11/2012
b   17/12/2014
a   08/01/2013
b   03/12/2012
c   04/12/2012
c   05/12/2012
c   06/12/2013

如果我正在寻找2012-13学年 - 2012年8月31日至2013年9月9日之间的最新回复,我希望得到以下结果:

a   08/01/2013
b   03/12/2012
c   05/12/2012

我使用以下数组公式来获取最新日期,无论年份如何:

{=MAX(IF($A$1:$A$7="a",$B$1:$B$7))}

我使用以下公式来确定学年内的日期:

=IF(COUNTIFS($B$1:$B$7,">="&$F$10,$B$1:$B$7,"<="&$G$10,$A$1:$A$7,"="&"a")>0,B1:B7,"")

(其中F10是31/8/12,G10是1/9/13)

我试过了......它不起作用:

{=IF(COUNTIFS($B$1:$B$7,">="&$F$10,$B$1:$B$7,"="&$G$10,$A$1:$A$7,"="&$E1)>0,MAX(IF($A$1:$A$7=E1,$B$1:$B$7)),"")}

我不能简单地通过减少日期来对列进行排序,因此它首先遇到的日期是最新的,因为我还需要为另一列提供类似的东西,并且它们并不总是处于相同的顺序。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

你接近这个:

{=MAX(IF($A$1:$A$7="a",$B$1:$B$7))}

您需要过滤掉与您的条件不符的日期,这可以通过以下方式完成:

IF($B$1:$B$7<=date(2013,9,1), ...
IF($B$1:$B$7>=date(2012,8,31), ...

您无法使用AND加入它们,因为它会将数组转换为单个值

{=MAX(IF(AND($A$1:$A$7="a",
             $B$1:$B$7<=date(2013,9,1),
             $B$1:$B$7>=date(2012,8,31)
             ),$B$1:$B$7))}

将返回 B1:B7 范围内的第1项或0,具体取决于所有测试的进度。所以下一步是将IF连接在一起,这样就可以了:

{=MAX(IF($A$1:$A$7="a",
          IF($B$1:$B$7<=$G$10,
              IF(B1:B7>=$F$10,$B$1:$B$7))))}

(展开以便您可以看到IF语句的嵌套)现在可以获得您想要的结果:8/1/2013