如何根据列A中的特定stringfind列B中的最小值和最大值?

我在列A中有一个项目列表,并分别在列B和C中具有对应的年份和月份值。 我期望findB列中的最小和最大年份(基于列A中的特定值),然后查找列C中的相应月份(仅用于最大值和最小值),然后生成并填写开始date和结束date分别在E栏和F栏。 例如,如果@Item =膝上型计算机然后find最小,最大的@年,然后find@Month相邻的值。 最后制定并相应地显示一个date。 我可以使用公式来达到这个目的吗?还是超出了范围,使用macros可以更好地实现?

在这里输入图像说明

对于开始date,在E2中:

=IF(A2<>A1,DATE(AGGREGATE(15,6,$B$1:$B$1000/($A$1:$A$1000=A2),1),AGGREGATE(15,6,$C$1:$C$1000/(($A$1:$A$1000=A2)*($B$1:$B$1000 = AGGREGATE(15,6,$B$1:$B$1000/($A$1:$A$1000=A2),1))),1),1),"") 

而在F2的结束date:

 =IF(A2<>A1,EOMONTH(DATE(AGGREGATE(14,6,$B$1:$B$1000/($A$1:$A$1000=A2),1),AGGREGATE(14,6,$C$1:$C$1000/(($A$1:$A$1000=A2)*($B$1:$B$1000 = AGGREGATE(14,6,$B$1:$B$1000/($A$1:$A$1000=A2),1))),1),1),0),"") 

然后复制所需的行。

汇总function是在2010年引入的,因此在Excel 2007或更早版本中将不起作用。

在这里输入图像说明

我以为他们可以简化为:

 =IF(A2<>A1,AGGREGATE(15,6,DATE($B$1:$B$1000,$C$1:$C$1000,1)/($A$1:$A$1000=A2),1),"") 

和:

 =IF(A2<>A1,AGGREGATE(14,6,EOMONTH(DATE($B$1:$B$1000,$C$1:$C$1000,1),0)/($A$1:$A$1000=A2),1),"") 

感谢@Jerry展示更简洁的方法。

这里是我认为应该适用于任何版本的Excel的东西,并感谢来自@ScottCarver的评论,现在可以将其复制下来,并将date放在每个项目的第一行:

在E2中input这个数组公式,然后复制下来:

 =IF(A2<>A1,MIN(IF(A:A=A2,DATE(B:B,C:C,1))),"") 

在F2中input这个数组公式,然后复制下来:

 =IF(A2<>A1,MAX(IF(A:A=A2,DATE(B:B,C:C+1,0))),"") 

因为这些是数组公式,所以你需要按下control-shift-enter而不是input。 input后,它们将被{}包围,表示它们是数组公式。

原始答案:

这是我认为应该为任何版本的Excel工作,但你不能复制它 – 你必须分别为每个项目input一个。 如果你真的希望他们分散,以便date在第一次出现的行(如在你的屏幕截图),那么这不会真的为你工作。

对于笔记本电脑的开始date:

 =MIN(IF(A:A="Laptop",DATE(B:B,C:C,1))) 

对于笔记本电脑的结束date:

 =MAX(IF(A:A="Laptop",DATE(B:B,C:C+1,0))) 

这些是数组公式,所以你需要按控制键,而不是input。 input后,它们将被{}包围,表示它们是数组公式。