基于几个条件从数据数组返回值

时间:2013-02-09 13:02:35

标签: arrays excel lookup data-processing

我有一个包含3列的数据表(为简洁起见,简化了外观,但保留了排列和数据格式,使用我的区域设置格式化了第ADate,但它不是文本):

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. 如果上一周没有此模块的记录 - 日期应为空“无变化”字符串应为值(如{{ 1}}来自上面的示例,与初始数组有关,假设今天是2月9日。
  3. 对于#2,我最终得到了以下内容:

    • xxxxxDate
    • 对于=IF(SUMPRODUCT(--(A:A>TODAY()-7),--(A:A="xxxxx"))=0,"")Value(我在此处查看左侧相应的日期)

    至于#1 - 我被困住了,这就是我需要指导或建议的地方。我尝试使用=IF(F5="","No change")MATCH和类似但不太接近成功的不同内容:我要么有错误,要么没有相关结果。

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

1 个答案:

答案 0 :(得分: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了解工作样本