Рассчитать, содержится ли период времени в начальном и конечном времени - PullRequest
0 голосов
/ 13 мая 2019

У меня проблема с тем, что я пытаюсь вычислить в Excel, содержится ли какая-либо часть предоставленного периода рабочего времени в пределах определенного пользователем периода, который указывает часы ночной работы, например, 2330-0559 или 0000-0630.

Если я предоставляю рабочее время, которое я хочу, и любая часть обязанности находится в пределах указанного периода, это необходимо определить. Например. 2230-0630 дежурное время находится в обоих примерах выше.

Я могу попробовать несколько разных решений, но до сих пор не нашел правильного решения. Может быть, кто-то может помочь. Я также знаю, что 24:00 в Excel используется для полуночи в конце дня, а 00:00 - для полуночи, начиная с дня, так как Excel работает с 0-1 как часть дня.

sample solution

=OR(MOD(A5,1)>$E$2,MOD(A5,1)<$F$2)

Ответы [ 3 ]

1 голос
/ 13 мая 2019

Я бы работал с числом минут в десятичном виде и с этим установил бы допустимый диапазон от «Время начала работы» и «Время окончания работы».

Проверьте, можете ли вы найти в этом смысл:

enter image description here

Вот пример:

https://drive.google.com/file/d/1O1B76srlY8sYQHsV_TiZVzi-7B_18eSj/view?usp=sharing


Обновление: Извините за отсутствие объяснения. Здесь я изо всех сил стараюсь уточнить, как я это сделал.

Преобразование

Прежде всего я пытаюсь преобразовать любое время в минуты, поэтому 00:00 - это 0 минут, 01:00 - 60 минут, 24:00 (Excel показывает 00:00) - 1440 минут, 25:00 (Excel показывает 01:00) - 1500 минут.

Это преобразование я делаю с CONVERT(E2,"day", "mn"), который конвертирует из дня в минуты.

Нормализация диапазона и включение

Теперь каждый диапазон должен быть нормализован, это означает, что «Конец» должен быть всегда больше, чем «Старт». Для 00:00 до 06:00 это работает нормально, но для 22:00 до 06:00 его нужно настроить. Поэтому, если «Старт» больше, чем «Конец», тогда я добавляю 1440 минут (24 часа) к «Концу». Что я делаю с IF(A6>B6, 1440,0).

Затем вам нужно посмотреть, есть ли в каком-либо «Дежурном диапазоне» «Ночной диапазон». Это обычно делается по формуле if (DutyEnd > NightStart AND DuttyStart < NightEnd) then TRUE.

Задача 1

Это была основная концепция. Но затем, если вы попытаетесь сравнить диапазон, например, 00: 00-06: 00, содержащийся в 24: 00-06-00, это не сработает. И это потому, что преобразованные минуты 0-360 и 1440-1830, они не содержат друг друга.

В E3, чтобы это исправить, я сократил 1440 по модулю (MOD()), затем MOD(1440, 1440) = 0. Так что даже если вы используете значения, такие как 25:00 или 52:00, они будут сокращены до наименьшего количество минут. Например. 25:00 (1500 минут) = 1:00 = 60 минут, 52:00 (3120 минут) = 4:00 = 240 минут

Задача 2

У нас есть еще одна проблема, возможные сравнения следующие:

  • 00: 00-06: 00 содержится в 00: 00-06: 00, в минутах это 0-390, содержится в 0-390
  • 00: 00-06: 00 содержится в 22: 00-06: 00, в минутах это 0-390, содержится в 1320-1830
  • 22: 00-06: 00 содержится в 00: 00-06: 00, который в минутах составляет 1320-1830, содержится в 0-390

Эти последние два не будут совпадать. Вот почему в столбце «Содержит» (например, E6) я сравниваю с «критериями ночи» - 1400 и + 1400.

Надеюсь, это немного понятно. Дайте мне знать иначе ..

0 голосов
/ 13 мая 2019

POC

ПОНИМАНИЕ ДАТЫ И ВРЕМЕНИ В EXCEL

Даты в Excel сохраняются как INTEGERS.Они представляют дни с 1900/01/1 с этой датой 1.

Время хранится в виде десятичной дроби, которая представляет собой долю дня.24 часа - 1, 0,5 - 12 часов дня.и т. д.

Другими словами, все, что слева от десятичного знака, является датой, а все, что справа - временем.

ПРОСТО ИСПОЛЬЗОВАНИЕ ВРЕМЕНИ И ПЕРЕКРЫТИЕ ПОЛУНОЧИ

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

Быстрый способ исправить это - добавить дату к вашему времени.Жизнь станет намного проще с математикой.Однако вы можете не добавлять полные даты начала и окончания.С допущением, что время начала и окончания составляет не более 24 часов, простое решение состоит в том, чтобы добавить 1 к времени окончания, когда время окончания меньше времени начала.Это означает, что это на следующий день.

Если вы указали дату примера, столбец C был вставлен для ИСПРАВЛЕНИЯ времени окончания.Он сделал проверку конца меньше, чем начало, если так, добавьте одну, используя следующую формулу:

=B6+(B6<=A6)

Часть в скобках является логической проверкой.Он либо оценивается как ИСТИНА или ЛОЖЬ.Когда Excel запускает логическое значение (ИСТИНА или ЛОЖЬ) через математический оператор (не функция, подобная сумме), он преобразует ИСТИНА в 1 и ЛОЖЬ в 0.

ДЛИНА

Прямая математика Cминус А, так как С всегда после старта и больше двух из этих чисел.

=C6-A6

ПОЛНАЯ НОЧЬ

Нужно быть немного осторожнее в определении пересечения полуночи при стартеВремя или время окончания точно полночь.Технически говоря, вы не пересекли его, если начинаете или останавливаетесь на нем.Разница действительно <против <= или> против> =.Я оставлю это вам, чтобы разобраться.Для математики я использовал:

=AND(A6<1,C6>=1)

Хотя я не использовал этот столбец для чего-либо еще

START CHECK

=OR(A6>$F$2,A6<$G$2)

END CHECK

=OR(B6>$F$2,B6<$G$2)

ПРОВЕРКА В ЛЮБОЕ ВРЕМЯ

Я разбил это на три столбца.Его можно объединить в одну, но хотелось показать рабочие части.Первая проверка состоит в том, чтобы увидеть, наступило ли время начала до начала ночи и было ли время окончания смены после времени начала ночи.Вторая проверка была аналогичной для первого, за исключением того, что вы хотите знать, наступило ли время начала до времени окончания ночи, а время окончания смены - после времени окончания ночи.Для случая ИЛИ, который вы хотите проверить, чтобы убедиться, что ЛЮБОЙ из столбцов с F по I истинно:

COLUMN H
=AND(A6<=$F$2,C6>$F$2)

COLUMN I
=AND(A6<$G$2+1,C6>$G$2+1)

Обратите внимание на +1 для времени окончания ночи.Это означает, что время окончания фактически наступает на следующий день.

COLUMN J
=OR(F6,G6,H6,I6)
or
=(F6+G6+H6+I6)>=1

Поместите приведенные выше формулы в строку 6 и, при необходимости, скопируйте

0 голосов
/ 13 мая 2019

Ну, я думаю, что что-то упустил, но давайте посмотрим, работает ли это для вас.Для этого:

  1. Все часы должны быть набраны в формате hh:mm
  2. Night Criteria End в другой день.Это означает, что оно должно быть больше 00:00, иначе формулы не будут работать.Если вы введете что-то вроде start criteria=22:00 и night criteria= 23:50, оба раза будут в один и тот же день, поэтому формулы не будут работать
  3. Эта формула работает только в периоды менее 24 часов.Если в любое время разница между критериями превышает 24 часа, формулы не будут работать должным образом.

Теперь я ответил на ваши данные так:

enter image description here

Хитрость здесь в том, что касается времени без дат.Даты в Excel: , целые числа , а десятичные части - часы / минуты / секунды.Поэтому для правильного сравнения таких часов необходимо добавить целую часть.

Позвольте мне объяснить.В Excel 18:00 будет 0,75.И 06:00 будет 0,25.Если вы попытаетесь получить разницу между двумя значениями, вы получите -0,5.В десятичном формате это имеет смысл, но при попытке преобразовать во время это не имеет смысла для Excel.Итак, как я уже говорил, уловка здесь заключается в добавлении целых чисел (в данном случае, потому что 06:00 меньше, чем 18:00, мы бы добавили +1), так что Excel получит 1,25 - 0,75 = 0,5.А Excel может преобразовать 0,5 в часы , и он вернет ровно 12 часов, правильный результат.

Так что, зная это, трюк в формулах для ваших данных сравнивается с запускамии добавьте 1 или 2, чтобы затем сравнить должным образом с вашими критериями.Таким образом, Excel может выяснить, является ли время позже или раньше, чем критерий.

Все мои формулы являются следующими:

  1. ДЛИНА: =IF(B5<A5;B5+1-A5;B5-A5)
  2. ПОЛНАЯ НОЧЬ: =IF(Y(B5<A5;B5<>0);TRUE;FALSE)
  3. НАЧАЛО МЕЖДУ КРИТЕРИЯМИ: =IF(AND(IF(A5<$E$2;A5+2;1+A5)>=1+$E$2;IF(A5<$E$2;A5+2;1+A5)<=$F$2+2);TRUE;FALSE)
  4. КОНЕЦ МЕЖДУ КРИТЕРИЯМИ: =IF(AND(IF(B5<$E$2;B5+2;1+B5)>=1+$E$2;SI(B5<$E$2;B5+2;1+B5)<=$F$2+2);TRUE;FALSE)
  5. ЛЮБАЯ ЧАСТЬ: =IF(OR(E5=TRUE;F5=TRUE;AND(A5<$E$2;A5+C5>1+$F$2));TRUE;FALSE)

В любом случае, я загрузил файл на свой Gdrive, на случай, если будет полезно загрузить и проверить формулы.

Это лучшее, что я получил.Возможно, есть лучший способ, но я надеюсь, что это может помочь вам, или, по крайней мере, вы можете адаптировать его к вашим потребностям.

https://drive.google.com/open?id=1nrZKfyUhED_y6iiPRSUwRf7GhJlBYt-O

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