Excel中的最大条件语句具有重复的最大值

时间:2015-07-21 17:30:26

标签: excel conditional-statements

我在Excel中需要帮助找到基于以下四个条件语句的金额找到正确输出

  1. 时间戳的最大值;
  2. 如果有最多重复日期,请使用相同时间戳的最后一行,因为数据不会延长到秒;
  3. 每月时间戳;
  4. 每(4)个唯一 ID
  5. 并将其他行留空。 正确输出列是预期输出。

    以下是样本数据:

    ╔════╦═════════════════════════════╦═════════╦════════════════╦══╦═════════════╦════════════╦═════════╗
    ║ ID ║ Timestamp (yyyy-mm-dd H:mm) ║ Amount  ║ Correct Output ║  ║ Date Format ║  Max Date  ║  Test   ║
    ╠════╬═════════════════════════════╬═════════╬════════════════╬══╬═════════════╬════════════╬═════════╣
    ║ A  ║ 2013-04-15 20:42            ║ NULL    ║ NULL           ║  ║ 2013-04-15  ║ 2013-04-15 ║ NULL    ║
    ║ A  ║ 2013-05-23 23:09            ║ 300000  ║ 300000         ║  ║ 2013-05-23  ║ 2013-05-23 ║ 300000  ║
    ║ A  ║ 2013-09-15 23:36            ║ 300000  ║ 300000         ║  ║ 2013-09-15  ║ 2013-09-15 ║ 300000  ║
    ║ A  ║ 2013-12-19 5:58             ║ 300000  ║                ║  ║ 2013-12-19  ║ 2013-12-19 ║ 0       ║
    ║ A  ║ 2013-12-19 6:18             ║ 0       ║                ║  ║ 2013-12-19  ║ 2013-12-19 ║ 0       ║
    ║ A  ║ 2013-12-19 6:18             ║ 0       ║ 0              ║  ║ 2013-12-19  ║ 2013-12-19 ║ 0       ║
    ║ B  ║ 2013-05-23 23:00            ║ NULL    ║                ║  ║ 2013-05-23  ║ 2013-05-23 ║ 0       ║
    ║ B  ║ 2013-05-23 23:04            ║ 0       ║ 0              ║  ║ 2013-05-23  ║ 2013-05-23 ║ 0       ║
    ║ B  ║ 2013-05-30 3:48             ║ 2339000 ║                ║  ║ 2013-05-30  ║ 2013-05-30 ║ 1169500 ║
    ║ B  ║ 2013-05-30 3:54             ║ 1169500 ║ 1169500        ║  ║ 2013-05-30  ║ 2013-05-30 ║ 1169500 ║
    ║ B  ║ 2013-06-02 11:46            ║ 2339000 ║                ║  ║ 2013-06-02  ║ 2013-06-02 ║ 2339000 ║
    ║ B  ║ 2013-06-27 8:40             ║ 2339000 ║                ║  ║ 2013-06-27  ║ 2013-06-27 ║ 2339000 ║
    ║ B  ║ 2013-06-27 13:59            ║ 2339000 ║                ║  ║ 2013-06-27  ║ 2013-06-27 ║ 2339000 ║
    ║ B  ║ 2013-06-27 13:59            ║ 2339000 ║ 2339000        ║  ║ 2013-06-27  ║ 2013-06-27 ║ 2339000 ║
    ║ C  ║ 2015-02-09 12:43            ║ NULL    ║                ║  ║ 2015-02-09  ║ 2015-02-09 ║ NULL    ║
    ║ C  ║ 2015-02-09 12:43            ║ NULL    ║ NULL           ║  ║ 2015-02-09  ║ 2015-02-09 ║ NULL    ║
    ║ D  ║ 2013-12-02 0:05             ║ NULL    ║                ║  ║ 2013-12-02  ║ 2013-12-02 ║ 37000   ║
    ║ D  ║ 2013-12-02 0:37             ║ 37000   ║ 37000          ║  ║ 2013-12-02  ║ 2013-12-02 ║ 37000   ║
    ║ D  ║ 2014-07-16 7:36             ║ 0       ║                ║  ║ 2014-07-16  ║ 2014-07-16 ║ 0       ║
    ║ D  ║ 2014-07-16 7:36             ║ 0       ║ 0              ║  ║ 2014-07-16  ║ 2014-07-16 ║ 0       ║
    ║ E  ║ 2013-06-27 8:35             ║ NULL    ║ NULL           ║  ║ 2013-06-27  ║ 2013-06-27 ║ NULL    ║
    ╚════╩═════════════════════════════╩═════════╩════════════════╩══╩═════════════╩════════════╩═════════╝
    

    参考文献:

    • A栏 - ID
    • B列 - 时间戳
    • F列 - 日期格式
    • G栏 - 最长日期
    • H栏 - 测试

    以下是我尝试的步骤:

    1. 我使用date
    2. 创建了日期格式
    3. 使用=MAX(IF($F$2:$F$22=F2,IF($A$2:$A$22=A2,$B$2:$B$22))) (数组中)
    4. 创建了最长日期
    5. 使用=INDEX(C2:C22,MATCH(G2,B2:B22,0)) (数组中)
    6. 创建测试

1 个答案:

答案 0 :(得分:0)

假设第一个“正确输出”的单元格D2:

=IF(SUMPRODUCT(0+(MONTH(G$2:G$22)=MONTH(G2)),0+(A$2:A$22=A2))=SUMPRODUCT(0+(MONTH(G$2:G2)=MONTH(G2)),0+(A$2:A2=A2)),LOOKUP(1,0/((MONTH(G$2:G$22)=MONTH(G2))*(A$2:A$22=A2)),C$2:C$22),"")

根据需要复制。

请注意,您可以修改被引用的上排(此处为22)以满足您的要求,但是您应该注意不要使其过于任意大(并且当然不要引用整个列!),因为,对于每个引用额外的单元格,将需要额外的计算。

这适用于这些额外的细胞是否在技术上超出了这些范围内最后使用的细胞。有一些功能,例如COUNTIF(S)/ SUMIF(S),您可以在不损害性能的情况下引用整个列,但不能使用在数组上运行的函数,例如AGGREGATE,SUMPRODUCT和任何需要CSE的构造。

更好的是,让您的范围变得动态,以便在数据扩展/收缩时自动调整。

此致