在excel中find匹配行的最后一个值

我想找出最后一次出现的具体价值,如果是在那里应用一些公式。

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的情况下才会填充差异,并且如果有多个启动事件,则select第一个事件。 我只是想了解是否可以用Excel公式(没有macros)? 如果是的话,怎么样?

我已经试过使用索引函数没有成功

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

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

 =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是“S”/“E”。 将公式放在第一个数据行的D列中,并按CTRL + SHIFT + ENTER使其成为数组公式。 现在你应该在公式周围看到{} 。 复制单元格(CTRL + C)并将其粘贴到公式已在的行之外的所有行中。

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

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

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

以及E2最后的索引+匹配公式:

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

有了你的示例数据,它应该是这样的结果:

 ABCDE ----------------------------------------------------------- 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