Пересечение интервалов дат
Одна из типичных задач для пользователя Microsoft Excel. Имеем два диапазона дат вида «начало-конец». Задача состоит в том, чтобы определить пересекаются ли эти диапазоны и, если да, то на сколько дней.
Пересекаются или нет?
Начнем с решения вопроса о том, есть ли пересечение интервалов в принципе? Предположим, что у нас есть таблица рабочих смен сотрудников вот такого вида:
Хорошо видно, что рабочие смены Ярослава и Елены пересекаются, но как это вычислить, не прибегая к построению календарного графика и визуальному контролю? Нам поможет функция СУММПРОИЗВ (SUMPRODUCT).
Вставим в нашу таблицу еще один столбец с формулой, которая выдает логическое значение ИСТИНА в случае пересечения дат:
На сколько дней пересечение?
Если принципиально не просто понимать — пересекаются наши интервалы или нет, а точно знать сколько именно дней попадает в пересечение, то задача усложняется. Рассуждая логически, необходимо «прокачать» аж 3 разных ситуации в одной формуле:
- интервалы не пересекаются
- один из интервалов полностью поглощает другой
- интервалы пересекаются частично
Периодически реализацию подобного подхода я вижу у других пользователей с помощью кучи вложенных друг в друга функций ЕСЛИ и т.п.
На самом деле все можно сделать красиво с помощью функции МЕДИАНА (MEDIAN) из категории Статистические.
Если условно обозначить начало первого интервала за Н1, а конец за К1, и начало второго за Н2 и конец за К2, то в общем виде наша формула может быть записана как:
=МЕДИАНА(Н1;К1+1;К2+1)-МЕДИАНА(Н1;К1+1;Н2)
Компактно и изящно, не правда ли?
Ссылки по теме
- Как Excel на самом деле работает с датами? Как вычислить количество календарных или рабочих дней между датами?
- Как построить календарный график (отпусков, тренингов, смен…) в Excel с помощью условного форматирования?
- Проверка одного или нескольких условий с помощью функций ЕСЛИ (IF)
Skip to content
Условное форматирование пересекающихся дат
На чтение 2 мин. Просмотров 658
Содержание
- Общая формула
- Объяснение
- Как работает формула
Общая формула
=СУММПРОИЗВ((дата_начала<=даты_окончания)*( дата_окончания>= даты_начала))>1
=SUMPRODUCT((start_date<=end_dates)*(end_date>=start_dates))>1
Объяснение
Для того чтобы выделить ячейки, где даты пересекаются,
вы можете использовать условное форматирование с формулой, основанной на
функции СУММПРОИЗВ. В приведенном примере формула в ячейке E6:
=СУММПРОИЗВ(($C6<=$D$5:$D$9)*($D6>=$C$5:$C$9))>1
=SUMPRODUCT(($C6<=$D$5:$D$9)*($D6>=$C$5:$C$9))>1
Это та же самая формула, которая используется для выделения
целых строк в таблице с использованием правила условного форматирования на
основе формулы.
Как работает формула
Подумайте, как работают перекрывающиеся даты. Чтобы
проект перекрывал даты других проектов, должны быть выполнены два условия:
- Дата начала должна быть меньше или равна (<=) по крайней мере до одной другой даты окончания и списка.
- Дата окончания проекта должна быть больше или равна (>=) по крайней мере одной другой дате начала в списке.
Если оба этих условия верны, даты проекта должны
перекрывать другой проект в этом списке.
Функция СУММПРОИЗВ идеально подходит этой задачи,
потому что она отлично выполняет сравнения массивов.
Чтобы проверить дату начала проекта снова на все даты
окончания, мы используем это выражение:
($C6<=$D$5:$D$9)
($C6<=$D$5:$D$9)
Для того чтобы проверить дату окончания проекта на все
даты окончания, мы используем это выражение:
($D6>=$C$5:$C$9)
($D6>=$C$5:$C$9)
Полученные массивы значений ИСТИНА ЛОЖЬ умножаются друг
на друга внутри СУММПРОИЗВ. Это автоматически приводит к результатам ИСТИНА и ЛОЖЬ
в 1 и 0, поэтому формула разрешается следующим образом:
=СУММПРОИЗВ({0;1;1;1;1}*{1;1;1;0;0})>1
=СУММПРОИЗВ({0;1;1;0;0})>1
=ИСТИНА
=SUMPRODUCT({0;1;1;1;1}*{1;1;1;0;0})>1
=SUMPRODUCT({0;1;1;0;0})>1
=TRUE
Как найти перекрывающиеся диапазоны дат / времени в Excel?
В этой статье я собираюсь поговорить о том, как найти или проверить, перекрывается ли диапазон дат или временной диапазон с другими в Excel, как показано ниже.
Проверьте перекрывающиеся диапазоны дат / времени с помощью формулы
Проверьте перекрывающиеся диапазоны дат / времени с помощью формулы
1. Выберите ячейки даты начала, перейдите к Имя Box набрать имя и нажать Enter ключ, чтобы успешно присвоить этому диапазону ранжированное имя. Смотрите скриншот:
2. Затем выберите даты окончания и дайте ей другое ранжированное имя в Имя Box и нажмите Enter ключ. Смотрите скриншот:
3. Выберите пустую ячейку, в которую вы поместите приговор, и введите эту формулу. = СУММПРОИЗВ ((A2 = дата начала))> 2, и перетащите дескриптор автозаполнения вниз к ячейкам с формулой. Если в ячейке отображается ИСТИНА, это означает, что относительный диапазон дат перекрывается с другими, иначе диапазоны данных не перекрываются с другими.
В формуле A2 и B2 — это диапазон дат, который вы хотите проверить, enddate и startdate — это ранжированные имена, которые вы дали на шагах выше.
Наконечник. В некоторых случаях вы можете добавить дни к дате, если вы заинтересованы в быстрой надстройке, я представляю Kutools for ExcelАвтора Добавить дни к дате утилита для вас, вы можете легко справиться с задачей, как показано на следующем снимке экрана. Это полная функция без ограничений в 30 дней, пожалуйста, скачайте и получите бесплатную пробную версию сейчас.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (5)
Оценок пока нет. Оцените первым!
Добрый день. Помогите пожалуйста. Мне надо найти совпадения в периодах работы одного и того же человека на разных предприятиях. Если он одновременно работал в 2 и более местах, тогда необходимо показать начало и конец совпадения по датам. Первую часть я получила, а вторая не получается.
=СУММПРОИЗВ(($A$2:$A$9=A2)*(H2<=$I$2:$I$9)*(I2>=$H $2:$H$9))
где А — номер паспорта, H — начало поступления на работу, I — дата ухода с работы
В следующих 2х столбцах или в отдельной таблице надо прописать начало и конец совпадений.
Если совпадений 2, то при помощи Сводной таблицы нахожу начало и конец периодов дат совпадений, а если больше 2, то минимум и максимум выдают не стыковочные даты. Может есть другой вариант? Спасибо.
Следующая формула покажет любые помехи для последнего ряда. Просто скопируйте эту формулу в ячейку K3
и скопируйте его:
=IF(OR(AND(OR(I3>(I$2:I2)),OR(I3<(J$2:J2))),AND(OR(I3>(I$2:I2)),OR(I3<(J$2:J2)))),"interference","OK")
Обратите внимание, что это формула массива, которая должна быть введена с помощью Ctrl
+ Shift
+ Enter
, Для получения дополнительной информации о формулах массива вы можете прочитать следующую статью: https://support.office.com/en-us/article/Guidelines-and-examples-of-array-formulas-7D94A64E-3FF3-4686-9372-ECFD5CAA57C7
Если вы хотите показать interference
для обоих рядов, то вам придется расширить на I$2:I2
а также J$2:J2
включить весь список. Таким образом, это может быть (например) I$2:I$500
а также J$2:J$500
соответственно. Тем не менее, вы не можете включить саму строку. В противном случае, вы всегда получите interference
потому что формула будет проверять себя. Таким образом, вам придется генерировать отдельные формулы для каждой строки, и вы не можете ввести общую формулу и скопировать ее вниз.
Я не уверен, как показать (только с формулами) мешающую запись. Это происходит главным образом из-за того, что может быть более одной мешающей записи, которая затем должна быть перечислена и отделена ,
, Я не думаю, что это может быть сделано только с формулами.
Примечание. Приведенное выше решение основано на базовом принципе, согласно которому все даты и время в Excel (по существу) представляют собой просто числа, отформатированные как даты или время. Для получения дополнительной информации вы можете прочитать следующее: Изменить формат даты с помощью замены или замены Итак, приведенная выше формула просто проверяет, если дата в столбце I
находится между любой предыдущей датой в столбце I
и колонка J
, Если дата в столбце I
является >
и предыдущая дата в столбце I
а также <
по сравнению с датой в столбце J
тогда это помеха. То же самое должно быть проверено на дату в столбце K
и тогда оба должны быть объединены с OR
, Вот и вся формула выше.
Обновить:
На основе комментария, предоставленного @Gordon, формула может быть улучшена с помощью COUNTIFS
функция. Просто введите следующую формулу в ячейку C2
и скопируйте его:
=SUM(COUNTIFS(A:A,"<"&A2,B:B,">"&A2),COUNTIFS(A:A,"<"&B2,B:B,">"&B2))
Любое число больше чем 0
означает, что есть хотя бы одно вмешательство. С помощью этой формулы он теперь считает / показывает несколько помех, как вы можете видеть на следующем снимке экрана:
Обратите внимание, что улучшенная формула больше не требует от вас знания диапазона таблицы. Вместо этого вы можете искать по всему столбцу A:A
а также B:B
для помех.