我在A列中有一个项目列表,并且分别在B列和C列中有相应的年份和月份值。我希望在B列中找到最小和最大年份(基于A列中的特定值),然后在C列中找到相应的月份(仅用于最大值和最小值),然后生成并填写开始日期和结束日期分别在E列和F列中。 例如。如果@Item =笔记本电脑那么找到@YEAR的MIN,MAX,然后找到@Month中的相邻值。最后相应地制定并显示日期。 我可以使用公式实现这一点,还是超出范围,使用宏更好?
答案 0 :(得分:3)
对于开始日期,在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中的结束日期:
=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),"")
然后复制所需的行。
汇总功能于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提供更简洁的方法。
答案 1 :(得分:3)
我认为以下内容适用于任何版本的Excel,并且由于@ScottCarver的注释,您现在可以将其复制下来并将日期放在每个项目的第一行:
在E2中输入此作为数组公式,然后向下复制:
=IF(A2<>A1,MIN(IF(A:A=A2,DATE(B:B,C:C,1))),"")
在F2中输入此作为数组公式,然后复制:
=IF(A2<>A1,MAX(IF(A:A=A2,DATE(B:B,C:C+1,0))),"")
因为这些是数组公式,所以你需要按control-shift-enter而不是输入。输入后,它们将被{}包围,表示它们是数组公式。
原始答案:
我认为以下内容适用于任何版本的Excel,但您无法将其复制下来 - 您必须为每个项目单独输入一个。如果你真的希望它们展开,以便日期在第一次出现的项目的行上(就像你的截图中那样),那么这对你来说真的不适用。
对于笔记本电脑项目的开始日期:
=MIN(IF(A:A="Laptop",DATE(B:B,C:C,1)))
对于笔记本电脑项目的结束日期:
=MAX(IF(A:A="Laptop",DATE(B:B,C:C+1,0)))
这些是数组公式,因此您需要按control-shift-enter而不是输入。输入后,它们将被{}包围,表示它们是数组公式。