在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