Как выделить праздничные и выходные дни в Excel: от простого к сложному

Вы когда-нибудь сталкивались с необходимостью быстро отметить в Excel все праздничные дни, чтобы не пропустить важные даты при планировании проектов, составлении графиков работы или расчёте зарплаты? Вручную прокрашивать каждую ячейку — не только утомительно, но и чревато ошибками, особенно если речь идёт о сотнях строк с датами. К счастью, Microsoft Excel предлагает несколько автоматизированных способов решить эту задачу — от простого условного форматирования до использования сложных формул с учётом региональных особенностей.

В этой статье мы разберём 5 проверенных методов, которые работают в Excel 2010–2023 и Office 365, включая нюансы для российского производственного календаря. Вы научитесь выделять не только стандартные выходные (субботу и воскресенье), но и официальные праздники, переносимые дни, а также создадите динамические правила, которые будут автоматически обновляться при изменении года. Особое внимание уделим скрытым ловушкам, из-за которых формулы могут работать некорректно — например, почему функция РАБДЕНЬ() иногда пропускает 9 мая или как учитывать региональные праздники, которых нет в стандартном календаре.

1. Базовый способ: условное форматирование для выходных дней

Начнём с самого простого — выделения суббот и воскресений. Этот метод не требует знания формул и подходит для большинства задач, где нужно визуально отделить рабочие дни от выходных.

Как это сделать:

  1. Выделите диапазон ячеек с датами (например, A1:A365).
  2. Перейдите на вкладку Главная → Условное форматирование → Создать правило.
  3. Выберите тип правила Использовать формулу для определения форматируемых ячеек.
  4. Введите формулу:
    =ИЛИ(ДЕНЬНЕД(A1;2)>5;ДЕНЬНЕД(A1;2)=1)
  5. Задайте формат (например, красный текст или серый фон) и нажмите ОК.

Формула работает так: функция ДЕНЬНЕД возвращает номер дня недели (от 1 до 7), где 1 — воскресенье, а 7 — суббота. Условие ИЛИ(ДЕНЬНЕД(...)>5;ДЕНЬНЕД(...)=1) проверяет, является ли день субботой (6 или 7, в зависимости от региональных настроек) или воскресеньем (1).

⚠️ Внимание: Если в вашей версии Excel воскресенье обозначается как 7, а суббота как 6, измените формулу на =ИЛИ(ДЕНЬНЕД(A1)>5). Проверьте это, введя в отдельную ячейку =ДЕНЬНЕД(ДАТА(2026;5;5)) (5 мая 2026 — суббота).
📊 Какой версией Excel вы пользуетесь?
Excel 2010-2016
Excel 2019
Office 365 (Excel Online)
Другая

2. Выделение праздников с помощью функции РАБДЕНЬ()

Функция РАБДЕНЬ() (или WORKDAY в английской версии) специально создана для работы с рабочими и нерабочими днями. Она позволяет учитывать не только выходные, но и праздники, если их явно указать в списке.

Алгоритм действий:

  1. Создайте на отдельном листе (например, Праздники) список официальных праздников в формате дат. Например:
ДатаНазвание праздника
01.01.2026Новый год
07.01.2026Рождество Христово
23.02.2026День защитника Отечества
08.03.2026Международный женский день
01.05.2026Праздник Весны и Труда

Примечание: Для динамического обновления списка праздников по годам можно использовать формулы вида =ДАТА(ГОД(СЕГОДНЯ());1;1) для 1 января.

  1. Выделите диапазон с датами для проверки.
  2. Создайте правило условного форматирования с формулой:
=ЕСЛИОШИБКА(РАБДЕНЬ(A1;1;Праздники!$A$1:$A$100);0)<>A1

Здесь Праздники!$A$1:$A$100 — диапазон со списком праздников. Формула возвращает ИСТИНА, если дата в ячейке A1 является праздничной или выходной.

3. Динамическое выделение праздников с учётом переноса дней

В российском производственном календаре некоторые праздники переносятся, если выпадают на выходной. Например, если 8 марта приходится на субботу, выходной переносится на понедельник. Стандартные функции Excel не учитывают эти нюансы, поэтому придётся создать пользовательскую логику.

Решение:

  1. Создайте вспомогательную таблицу с правилами переноса. Например:
ПраздникДатаПеренос на
Новый год01.01следующий понедельник, если суббота/воскресенье
Рождество07.01следующий понедельник
9 мая09.05не переносится
  1. Используйте формулу массива для проверки даты:
=ИЛИ(

ДЕНЬНЕД(A1;2)>5; -- выходные

СЧЁТЕСЛИ(Праздники!$A$1:$A$100;A1)>0; -- фиксированные праздники

И(МЕСЯЦ(A1)=1;ДЕНЬ(A1)=1;ДЕНЬНЕД(A1;2)<6;РАЗНДАТ(A1;ДАТА(ГОД(A1);1;1);"д")>0); -- перенос Нового года

И(МЕСЯЦ(A1)=5;ДЕНЬ(A1)=9) -- 9 мая (не переносится)

)

Эта формула учитывает:

  • 📅 Стандартные выходные (суббота/воскресенье).
  • 🎉 Фиксированные праздники из списка.
  • 🔄 Перенос Нового года, если 1 января выпадает на выходной.
  • 🚫 Исключения (например, 9 мая никогда не переносится).
⚠️ Внимание: Для корректной работы формулы массива в старых версиях Excel (до 2019) завершайте ввод комбинацией Ctrl+Shift+Enter. В новых версиях это не требуется.

4. Использование Power Query для импорта производственного календаря

Если вам нужно работать с актуальными данными по праздничным дням (например, для расчёта зарплаты или планирования смен), удобнее импортировать готовый производственный календарь прямо в Excel с помощью Power Query.

Пошаговая инструкция:

  1. Скачайте производственный календарь в формате .xlsx или .csv (например, с сайта Гарант).
  2. В Excel перейдите на вкладку Данные → Получить данные → Из файла → Из рабочей книги.
  3. Выберите скачанный файл и импортируйте таблицу с праздничными днями.
  4. В Power Query отфильтруйте только нужные столбцы (например, Дата и Тип дня).
  5. Загрузите данные на новый лист под именем Календарь.

Теперь вы можете использовать эти данные в формулах условного форматирования. Например:

=СЧЁТЕСЛИ(Календарь!$A$1:$A$1000;A1)>0

где Календарь!$A$1:$A$1000 — диапазон с датами праздников.

Скачать актуальный производственный календарь

Проверить формат файла (xlsx/csv)

Удалить лишние столбцы в Power Query

Преобразовать данные в таблицу Excel

Создать именованный диапазон для удобства ссылок-->

5. Автоматизация с помощью VBA: макрос для выделения праздников

Для продвинутых пользователей, которым нужно обрабатывать большие объёмы данных или создавать отчёты с учётом праздников, подойдёт решение на VBA. Макрос ниже автоматически выделяет все праздничные и выходные дни в выбранном диапазоне.

Код макроса:

Sub ВыделитьПраздники()

Dim rng As Range, cell As Range

Dim holidays As Variant

Dim i As Long

' Список праздников (формат: "мм.дд")

holidays = Array("01.01", "01.02", "01.03", "01.04", "01.05", "01.06", "01.07", "01.08", _

"02.23", "03.08", "05.01", "05.09", "06.12", "11.04")

' Запрос диапазона у пользователя

On Error Resume Next

Set rng = Application.InputBox("Выделите диапазон с датами:", "Выбор диапазона", Type:=8)

On Error GoTo 0

If rng Is Nothing Then Exit Sub

' Очистка предыдущего форматирования

rng.FormatConditions.Delete

' Добавление правила для выходных и праздников

rng.FormatConditions.Add Type:=xlExpression, Formula1:="=OR(WEEKDAY(" & rng.Cells(1).Address & ",2)>5," & _

"COUNTIF(holidays,TEXT(" & rng.Cells(1).Address & ",""мм.дд""))>0)"

With rng.FormatConditions(rng.FormatConditions.Count)

.Interior.Color = RGB(240, 240, 240) ' Серый фон

.Font.Color = RGB(255, 0, 0) ' Красный текст

End With

MsgBox "Праздники и выходные выделены!", vbInformation

End Sub

Как использовать макрос:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Запустите макрос нажатием F5 или через View → Macros.
  4. Выделите диапазон с датами, когда появится запрос.
⚠️ Внимание: Макрос использует жёстко заданный список праздников (holidays). Для динамического обновления замените массив на ссылку на диапазон с датами праздников (например, Sheet1!A1:A20).
Как добавить региональные праздники в макрос?

Чтобы учесть праздники вашего региона (например, День города), расширьте массив holidays:

holidays = Array("01.01", "07.01", "08.03", "01.05", "09.05", "12.06", "04.11", "12.09")

где "12.09" — День города Москвы (12 сентября). Не забудьте обновить список каждый год, если даты переносятся.

6. Продвинутый метод: создание пользовательской функции для праздников

Если вам часто приходится работать с праздничными днями, имеет смысл создать собственную функцию на VBA, которая будет возвращать ИСТИНА/ЛОЖЬ для любой даты. Это упростит формулы в условном форматировании и расчётах.

Код функции:

Function ЕстьПраздник(дта As Date) As Boolean

Dim holidays As Variant

Dim i As Long

' Список праздников (формат: "мм.дд")

holidays = Array("01.01", "01.02", "01.03", "01.04", "01.05", "01.06", "01.07", "01.08", _

"02.23", "03.08", "05.01", "05.09", "06.12", "11.04")

' Проверка на выходной (суббота/воскресенье)

If Weekday(дта, vbMonday) > 5 Then

ЕстьПраздник = True

Exit Function

End If

' Проверка на праздник

For i = LBound(holidays) To UBound(holidays)

If Format(дта, "mm.dd") = holidays(i) Then

ЕстьПраздник = True

Exit Function

End If

Next i

' Учёт переноса Нового года (если 1 января - выходной)

If Month(дта) = 1 And Day(дта) <= 3 And Weekday(дта, vbMonday) <= 5 Then

If Weekday(DateSerial(Year(дта), 1, 1), vbMonday) > 5 Then

ЕстьПраздник = (Day(дта) <= (8 - Weekday(DateSerial(Year(дта), 1, 1), vbMonday)))

End If

End If

End Function

Примеры использования функции:

  • 📊 В условном форматировании: =ЕстьПраздник(A1).
  • 📈 В формулах для расчёта рабочих дней: =ЕСЛИ(ЕстьПраздник(A1);"Выходной";"Рабочий").
  • 📅 Для фильтрации данных: создайте столбец с формулой =ЕстьПраздник(A1) и отфильтруйте по ИСТИНА.

FAQ: Частые вопросы о выделении праздников в Excel

Как выделить праздники в Excel Online?

В Excel Online доступно условное форматирование, но нет поддержки VBA. Используйте метод с функцией РАБДЕНЬ() (раздел 2) или создайте отдельный лист со списком праздников и ссылайтесь на него в формулах. Например:

=ИЛИ(ДЕНЬНЕД(A1)>5;СЧЁТЕСЛИ(Праздники!$A$1:$A$100;A1)>0)

Где Праздники — имя листа со списком дат.

Почему 9 мая не выделяется как праздник?

Скорее всего, в вашем списке праздников указано только 09.05, но не учтён факт, что 9 мая может выпадать на выходной (например, в 2023 году это было воскресенье). Добавьте в формулу проверку:

=ИЛИ(

ДЕНЬНЕД(A1)>5, -- выходные

СЧЁТЕСЛИ(Праздники!$A$1:$A$100;A1)>0, -- фиксированные праздники

И(МЕСЯЦ(A1)=5;ДЕНЬ(A1)=9) -- 9 мая (всегда праздник)

)

Можно ли автоматически обновлять список праздников по годам?

Да, для этого:

  1. Создайте таблицу с формулами для генерации праздников. Например, для 1 января:
  2. =ДАТА(ГОД(СЕГОДНЯ());1;1)
  3. Используйте Power Query для импорта актуального производственного календаря с официальных сайтов (раздел 4).
  4. Напишите макрос, который будет скачивать и обрабатывать календарь автоматически (требуются навыки VBA и работа с XMLHTTP).

Пример динамической формулы для 8 марта:

=ДАТА(ГОД(СЕГОДНЯ());3;8)
Как выделить только рабочие дни перед праздниками (сокращённые дни)?

Используйте комбинацию функций РАБДЕНЬ() и ЕСЛИ(). Например, чтобы выделить 31 декабря (если 1 января — праздник):

=И(РАБДЕНЬ(A1;1;Праздники!$A$1:$A$100)-A1=2;ДЕНЬНЕД(A1;2)<6)

Эта формула проверяет, что следующий рабочий день после A1 наступает через 2 дня (то есть завтра — праздник) и что текущий день — не выходной.

Как экспортировать список праздников в другой файл?

Чтобы перенести список праздников в другой документ:

  1. Выделите диапазон с датами праздников.
  2. Скопируйте его (Ctrl+C).
  3. В новом файле выберите ячейку для вставки и используйте Специальная вставка → Значения (Ctrl+Alt+V → В).
  4. Если нужно сохранить форматирование, используйте Главная → Формат по образцу.

Для автоматической синхронизации используйте Power Query или ссылки на внешние данные (Данные → Получить данные → Из файла).