Как использовать текущее время и дату для отображения определенного значения? - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь настроить лист Excel, который отображает имя человека, доступного в текущее время и дату. У меня есть один лист со списком дат и времени вместе с именами людей, которые доступны в то время. Например:

- 01/07/19 09:00 Bob
- 01/07/19 10:00 Bill
- 01/07/19 11:00 Ben

Я могу сделать это успешно в течение целого дня или недели, используя функции WEEKNUM или DAYNUM, а номер недели / дня указан в списке имен.

Я могу использовать NOW () для получения текущей даты и времени, но я не уверен, как я могу использовать это для получения желаемых результатов.

Я пытался найти ответ в Интернете, но не смог найти то, что искал.

Исходя из моего примера выше, если текущее время между 9:00 и 10:00, я хочу, чтобы имя Bill отображалось.

Ответы [ 3 ]

1 голос
/ 04 июля 2019

Исходя из того, что ваши даты являются фактическими датами, хранящимися как числа для Excel, а не числами, хранящимися в виде текста, так и для времени, то следующее решение должно работать для вас. Вы можете проверить свои данные, чтобы увидеть, если это фактическая дата, используя:

=ISNUMBER(A2) `where A2 is the cell in question

Если формула возвращает true, то вы знаете, что имеете дело с числом, отформатированным для отображения в виде даты или времени.

В качестве примечания, даты хранятся в виде целых чисел и представляют собой количество дней с 1900/01/01 года, причем эта дата равна 1. Время хранится в виде десятичной дроби, представляющей часть дня. 0,5 будет 12 часов дня.

В этом решении предполагается, что данные размещены в соответствии с изображением ниже.

В ячейку F1 поместите функцию NOW(). Я вручную ввел дату для контроля значения в демонстрационных целях.

В ячейку F2 введите следующую формулу:

=INDEX(C:C,AGGREGATE(15,6,ROW($A$2:$A$4)/((INT($F$1)=$A$2:$A$4)*(MOD($F$1,1)<=$B$2:$B$4)),1))

AGGREGATE создаст список или все номера строк и отсортирует их от наибольшего к наименьшему. Все эти номера строк будут разделены на ваши критерии проверки. Если результаты ваших критериев равны ВСЕ True, то строка делится на 1 и остается без изменений. Если критерий не выполняется, номер строки делится на 0, что приводит к ошибке. 6 в функции говорит агрегату игнорировать результаты ошибок. Таким образом, вы получите список или номера строк, которые соответствуют вашим критериям. 15 в совокупности говорит агрегат сортировать номера строк от наибольшего к наименьшему. 1 указывает агрегату возвращать номер строки в позиции 1 отсортированного списка. Затем Aggregate передает этот номер строки в INDEX, которая находит строку в соответствующем столбце и возвращает адрес этой ячейки.

POC

теперь просто чтобы вы знали. Точка останова для времени была установлена ​​таким образом, чтобы человек, находящийся рядом со временем списка, был выбран тем точным временем. Имея в виду время 0900 в указанный день, Боб будет выбран. В 10:00:01 будет выбран Бен. В 11:00:01 будет сгенерирована ошибка. Вы можете контролировать это, поместив все это в функцию IFERROR. В 00:00:00 Боб выбран.

1 голос
/ 03 июля 2019

Я верю, что это будет делать то, что вы хотите:

=INDEX(C2:C4,MATCH(NOW()-TODAY(),B2:B4,1))

Где столбец C содержит имена и столбец B время

Если дата и время в одном столбце, вы можете попробовать:

=INDEX(B1:B3,MATCH(NOW(),A1:A3,1))

Где столбец B содержит имена и столбец A дата и время

0 голосов
/ 04 июля 2019

Вот один из способов:

enter image description here

Формула в F1:

=INDEX(C2:C4,MATCH(1,INDEX((A2:A4=TODAY())*(HOUR(B2:B4)<=HOUR(NOW()))*(HOUR(B2:B4)>=HOUR(NOW())),0,1),0))

Что происходит? Мы используем MATCH, чтобы получить первый TRUE в списке INDEX, который сравнивает столбец A с TODAY раз столбцом B для HOUR.

Мы можем опустить вторую INDEX, но это сделает формулу массива для ввода через Ctrl Shift Enter

Обратите внимание, что этот пример сделан около 9:30 4 июля.

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