2016-10-19 2 views
0

Я хочу узнать последнее вхождение определенного значения, и если оно применимо к какой-либо формуле.поиск последнего значения с совпадающей строкой в ​​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 

Столбец машины будет иметь имя машины, время запуска - это время регистрации этого конкретного события, а оповещение может начинаться с конца.

мне нужен выход, как следующее:

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 

разница будет заполняться только в случае, если Е и есть соответствующее событие запуска для этой машины, если есть, то больше чем одно событие начала выбрать первый. Я просто хочу понять, возможно ли это с помощью формулы excel (без макроса)? если да, то как?

Я уже пробовал его с помощью функции индекса без успеха

=IF(C3="E",MATCH(A3,A2:$A$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, колонок А имеют имена компьютеров, столбец B времен журнала, колонок с «S»/«E». Поместите формулу в столбец D в первую строку данных и нажмите CTRL + SHIFT + ENTER, чтобы создать формулу массива. Теперь вы должны увидеть {}. Скопируйте ячейку (CTRL + C) и вставить его во все строки кроме строка, где формула уже.

Если вам нужна дополнительная помощь, разместить комментарий.

+0

Он дает неправильное значение, если есть два последовательных «E». Иногда возможно иметь два «E», в этом случае нам нужно игнорировать второй «E» –

1

Это может быть сделано с помощью сложной формулы массива, но вспомогательная формула может упростить выделение групп. Например, в 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),"") 

С вашими данными выборки, это должно привести к чему-то вроде этого:

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 
+0

, почему группа для последних двух строк равна 3? он должен быть равен 1, так как он такой же. в моем вопросе есть опечатка, мне нужно 490 как разность во времени в последней строке. т. е. разница между более ранним запуском (который еще не закрыт) и последней кнопкой конца. –

Смежные вопросы