2013-02-09 108 views
1

我有一个包含3列的数据表(为了清晰起见,简化了外观,但是排列和数据格式被保留,第一列ADate使用我的区域设置格式化,但它是NOT text):根据几个条件从数据数组中返回值

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名)日期和相应的值,它是对于相同的模块值中最大,但对于上周开始应该返回
  2. 如果对于最后一周此模块中没有记录 - 日期应该是空的,并“没有变化”字符串应该是值(为xxxxx从上面的例子,涉及到初始阵列和假设今天是2月9日)。

至于#2,我结束了以下内容:

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

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

如果这很重要 - 日期总是排序,最近在列表的末尾,即新的记录被添加到底部。同一个模块可能在同一天有几个记录。如果样本或解释不清楚 - 请回复评论,我会添加更多详细信息。谢谢!

回答

3

尝试这样的一个数组公式中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

=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天内的多个日期发生会给你最早的(改变MIN到MAX最新)

看到here的工作样本

+0

谢谢,我结束了'= IF(F2 =“”,“没有变化”,MAX( IF(A:A> TODAY() - 7,IF(B:B = E2,C:C))))'为值。但是Date呢?我无法弄清楚如何扩展我的解决方案,以包括过去一周的日期...... – 2013-02-09 14:04:27

+0

您希望MAX值出现的日期?我编辑了我的答案.... – 2013-02-09 14:37:51

+0

对不起,但日期的公式返回循环引用,如果我将它与我的公式一起使用它的价值:我使用日期字段检查是否为“”或“没有更改”的情况下。日期和值分别位于F和G. – 2013-02-09 16:36:14