在excel

时间:2016-10-19 09:48:54

标签: excel

我想找出最后一次出现的特定值,如果有的话,应用一些公式。

Machine Starttime             Alert
a       10/19/2016 12:16:15   S
a       10/19/2016 12:18:15   E
a       10/19/2016 12:19:20   S
b       10/19/2016 12:21:45   S
b       10/19/2016 12:21:48   S
b       10/19/2016 12:21:55   E
a       10/19/2016 12:23:15   S
a       10/19/2016 12:27:30   E

机器列将具有机器名称,Starttime是该特定事件的日志时间,警报可以是End的开始。

我需要输出如下:

Machine Starttime   Alert   Difference
a   10/19/2016 12:16:15 S   
a   10/19/2016 12:18:15 E   120
a   10/19/2016 12:19:20 S   
b   10/19/2016 12:21:45 S   
b   10/19/2016 12:21:48 S   
b   10/19/2016 12:21:55 E   10
a   10/19/2016 12:23:15 S   
a   10/19/2016 12:27:30 E   490

仅在E的情况下才会填充差异,并且该机器有相应的启动事件,如果有多个启动事件,则选择第一个。我只是想了解是否可以使用excel公式(没有宏)?如果有,怎么样?

我已经尝试使用索引功能而没有成功

=IF(C3="E",MATCH(A3,A2:$A$2,0),"")

2 个答案:

答案 0 :(得分:1)

是的,这是可能的,但这并不容易。您必须使用数组公式来解决此问题。公式为:

=IF(C2="S","",(B2-MIN(IF($A$2:A2=A2,IF($C$2:C2="S",IF(ROW($A$2:A2)>MAX(IF(ROW($A$2:A2)<ROW(A2),IF($A$2:A2=A2,IF($C$2:C2="E",ROW($A$2:A2))))),$B$2:B2)))))*86400)

第一个数据行是2,A列具有机器名,B列是日志时间,列c是&#34; S&#34; /&#34; E&#34;。将公式放在第一个数据行的D列中,然后按CTRL + SHIFT + ENTER使其成为数组公式。您现在应该在公式周围看到{}。 复制单元格(CTRL + C)并将其粘贴到公式所在的行之外的所有行中。

如果您需要更多帮助,请发表评论。

答案 1 :(得分:1)

可以使用一些复杂的数组公式来完成,但辅助公式可以更容易区分组。例如,在D2

= ( ABS(N(D1))+($A2<>$A1) ) * IF(C2="S",1,-1)

以及E2中的最后一个Index + Match公式:

=IF($C2="E", ROUND( ($B2 - INDEX($B$2:$B$9, MATCH(ABS($D2),$D$2:$D$9,0) ) )*24*60*60,0),"")

使用您的示例数据,应该会产生如下结果:

A       B                   C       D       E
-----------------------------------------------------------
Machine Starttime           Alert   Group   Index+Match
a       10/19/2016 12:16    S        1      
a       10/19/2016 12:18    E       -1      120
a       10/19/2016 12:19    S        1      
b       10/19/2016 12:21    S        2      
b       10/19/2016 12:21    S        2      
b       10/19/2016 12:21    E       -2      10
a       10/19/2016 12:23    S        3      
a       10/19/2016 12:27    E       -3      255