Строки группы Excel на основе временного интервала - PullRequest
0 голосов
/ 07 января 2020

У меня есть следующий результат Excel:

enter image description here

Я хочу сгруппировать вышеупомянутый результат в группы, основанные на сессиях, т.е. если промежуток времени между двумя последовательные метки времени больше 5 минут, это должен быть новый ряд. Например:

enter image description here

Мне нужна формула для достижения этой цели. Поскольку я довольно новичок в Excel, это вызывает у меня большую головную боль. Пожалуйста, помогите мне, если кто-нибудь знает, как это сделать или, по крайней мере, укажите мне направление.

Спасибо за тонну !!!

1 Ответ

1 голос
/ 07 января 2020

Судя по вашему скриншоту, кажется, что ваши метки времени на самом деле являются текстовыми значениями. Текст по умолчанию обычно выровнен по левому краю, где числа выровнены по правому краю. Похоже, у вас есть пробел в конце вашей отметки времени, указывающий на то, что он, вероятно, выровнен по левому краю и, следовательно, текст. Вы можете проверить его с помощью следующей формулы, которая вернет TRUE, если его текст.

=ISTEXT(P2)

, где P2 - одна из ваших меток времени.

CONVERT TIMESTAMPS TO TIME

Есть множество способов сделать это. Некоторые будут зависеть от настроек системы. Посмотрите на следующие функции, поскольку каждая из них может быть полезна в зависимости от вашей системы. Первые два являются гарантией, последние два в большей степени зависят от настроек системы.

  • ДАТА
  • ВРЕМЯ
  • ДАТА ЗНАЧЕНИЯ
  • ВРЕМЯ

Здесь важно помнить, что в Excel даты являются целыми числами, считающими дни с 1900/01/01 года, когда эта дата равна 1. Время сохраняется в виде десятичной дроби и представляет собой дробь / процент от дня. 24:00:00 не является допустимым временем в Excel, хотя некоторые функции могут работать с ним.

Поэтому, чтобы преобразовать вашу метку времени в P2, я использовал следующую формулу для извлечения даты:

=DATE(LEFT(P2,4),MID(P2,FIND("-",P2)+1,2),MID(P2,FIND(" ",P2)-2,2))

По сути, он входит в текст и удаляет отдельные номера для года, месяца и дня.

Чтобы вывести время, я мог бы сделать ту же процедуру, но решил продемонстрировать TIMEVALUE метод, который немного более надежен, чем DATEVALUE, и не слишком сильно зависит от настроек системы. С помощью следующей формулы я удалил весь временной код (МИНУС "UT C"):

=TIMEVALUE(TRIM(MID(P2,FIND(" ",P2)+1,FIND("UTC",P2)-FIND(" ",P2)-1)))

Я также предположил, что вы не смешиваете UT C и не сопоставляете его с другими часовыми поясами. что означает, что это может быть проигнорировано. Теперь, чтобы получить DATE и TIME в одной ячейке, вам нужно просто сложить вместе две формулы:

=DATE(LEFT(P2,4),MID(P2,FIND("-",P2)+1,2),MID(P2,FIND(" ",P2)-2,2))+TIMEVALUE(TRIM(MID(P2,FIND(" ",P2)+1,FIND("UTC",P2)-FIND(" ",P2)-1)))

В конце примера я поместил эту формулу в Q2 и скопировал

DELTA TIME

Поскольку вы хотите разбить свои группы на основе разницы во времени между отдельными записями, я использовал вспомогательный столбец для хранения разницы во времени. В моем примере в конце я сохранил эту разницу в столбце S. Первая запись пуста, так как до нее нет времени. Я использовал следующую формулу в S3 и скопировал ее вниз.

=Q3-Q2

Я применил к ячейке пользовательское форматирование [h]: mm: ss, чтобы отобразить его, как показано.

FIND GROUP BREAK POINTS

В моем примере я использую вспомогательный столбец T для хранения флагов точек останова. Как минимум, у вас будет две точки останова. Ваша первая запись и ваша последняя запись. Для простоты я просто жестко закодировал свой первый флаг точки останова в T2 как 1. Заявив в T3, нужно сделать три проверки. Если какой-либо из них равен TRUE, необходимо добавить следующий флаг, увеличив значение на единицу. три проверки:

  • Это последняя запись
  • В следующий раз дельта больше 5 минут (означает конец группы)
  • Это время дельта больше 5 минут (означает начало группы)

На основании этих трех проверок я поместил следующую формулу в T3 и скопировал ее вниз:

=IF(OR(S4="",S4>TIME(0,5,0),S3>TIME(0,5,0)),MAX($T$2:T2)+1,"")

Обратите внимание на $ на первая часть диапазона для функции MAX. Это заблокирует начало диапазона, в то время как формула копируется, а конец диапазона соответственно увеличивается.

Кроме того, строка после последнего ввода времени должна быть пустой. Если он не пустой и содержит заданное значение, замените S4 = "" на S4 = "заданное значение".

GENERATE TABLE

Существует несколько способов ссылки на флаги и потяните соответствующее время. Вот несколько формул, на которые вы можете посмотреть:

  • INDEX / MATCH
  • LOOKUP

В этом примере я решил использовать LOOKUP, хотя считаю, что INDEX и МАТЧ более подходящие и надежные. Для начала мы хотим создать список номеров ODD и ДАЖЕ номеров. Они представляют начало и конец групп и соответствуют флагам, установленным в столбце T. Один из способов генерировать числа ODD и EVEN при копировании:

=ROW(A1)*2-1  (ODD)
=ROW(A1)*2    (EVEN)

Следующим шагом является поиск сгенерированных число в столбце T, а затем вытянуть соответствующую временную метку в столбце Q. Я сделал это с помощью следующей формулы в V2 и скопировал вниз.

=LOOKUP(ROW(A1)*2-1,T:T,Q:Q)

И в W2

=LOOKUP(ROW(A1)*2,T:T,Q:Q)

POC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...