根据几个条件从数据数组中返回值

我有一个数据表3列(为简洁起见,简化了看,但保留排列和数据格式,第一列A Date格式与我的区域设置,但它不是文本):

 Date Module Value 27.01.2013 xxxxx 90 27.01.2013 ttttt 100 29.01.2013 aaaaa 110 31.01.2013 aaaaa 50 31.01.2013 mmmmm 200 31.01.2013 ttttt 80 03.02.2013 ttttt 140 04.02.2013 aaaaa 120 07.02.2013 mmmmm 150 07.02.2013 ttttt 90 07.02.2013 aaaaa 190 08.02.2013 aaaaa 210 08.02.2013 aaaaa 90 08.02.2013 aaaaa 170 08.02.2013 ttttt 90 08.02.2013 ttttt 110 08.02.2013 mmmmm 130 09.02.2013 mmmmm 90 09.02.2013 aaaaa 200 

名单可能会很长,并定期更新。 我需要达到的是:在同一张纸上,我有以下计算的单元格放置在E列开始(即在数据和计算区域之间有一个空白列D):

 MAX last week Date Value aaaaa 09.02.2013 200 mmmmm 07.02.2013 150 ttttt 03.02.2013 140 xxxxx <empty> No change 

基本上我需要从A:C的数据数组中找出以下内容:

  1. 对于E中的值列表(对应于B模块名称)应该返回相同模块的值中最大的date和对应的值,但是从现在开始最后一周应该返回。
  2. 如果在上个星期没有这个模块的logging – date应该是空的 ,并且“无变化”string应该是Value(如上面的样本中的xxxxx ,与初始数组有关,假设今天是2月9日) 。

至于#2,我结束了以下几点:

  • For Date=IF(SUMPRODUCT(--(A:A>TODAY()-7),--(A:A="xxxxx"))=0,"")
  • 对于Value=IF(F5="","No change") (我在这里检查相应的date在左边)

至于#1 – 我卡住了,那就是我需要指导或build议的地方。 我尝试了与MATCHVLOOKUP等类似的东西,但是甚至没有接近成功:我要么有错误,要么没有相关的结果。

如果这一点很重要的话,那么date总是被sorting的,最近的排在最后,即新的logging被添加到最后。 同一个模块在同一天可能有多个logging。 如果样本或解释不清楚 – 请回复评论,我会添加更多的细节。 谢谢!

在G2中尝试像这样的数组公式

=IF(COUNTIFS(A$2:A$100,">"&TODAY()-7,B$2:B$100,E2),MAX(IF(A$2:A$100>TODAY()-7,IF(B$2:B$100=E2,C$2:C$100))),"No change")

CTRL+SHIFT+ENTER并复制下来

然后在F2中的date

=IF(G2="No change","",MIN(IF(A$2:A$100>TODAY()-7,IF(B$2:B$100=E2,IF(C$2:C$100=G2,A$2:A$100)))))

如果模块的最后7天有多个date,那么发生最大值的date会最早给您(最新更改为MIN到MAX)

看到这里的工作示例