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

Почему выделение воскресений в Excel требует особого подхода

Работа с датами в Microsoft Excel — одна из самых востребованных задач среди аналитиков, бухгалтеров и менеджеров. Но если с выделением выходных в целом всё более-менее понятно (обычно это суббота и воскресенье), то изолированное выделение только воскресений часто вызывает вопросы. Дело в том, что стандартные функции Excel не всегда корректно обрабатывают региональные настройки выходных дней, а в некоторых странах воскресенье может быть единственным официальным выходным (например, в ОАЭ или Израиле).

В этой статье мы разберём 5 проверенных способов выделить воскресенья в таблице — от элементарного условного форматирования до написания VBA-макросов для динамических отчётов. Особое внимание уделим скрытой ошибке в функции WEEKDAY(), из-за которой многие пользователи получают неверные результаты при работе с датами до 1900 года. Также вы узнаете, как автоматически подсвечивать воскресенья в сводных таблицах и фильтровать их без ручного ввода критериев.

Все методы протестированы в Excel 2010–2023 и Office 365, включая веб-версию. Если вы работаете с Google Sheets, majority приведённых решений будут работать и там, но с небольшими поправками (об этом упомянем отдельно).

Способ 1: Условное форматирование по дню недели (самый быстрый метод)

Это базовый способ, который подойдёт для одноразового выделения воскресений в статичной таблице. Его преимущество — минимальные временные затраты (всё занимает не больше минуты), а недостаток — отсутствие динамичности (при добавлении новых дат придётся обновлять правила вручную).

Инструкция:

  1. Выделите диапазон ячеек с датами (например, A2:A100).
  2. Перейдите на вкладку Главная → Условное форматирование → Создать правило.
  3. Выберите тип правила: Использовать формулу для определения форматируемых ячеек.
  4. Введите формулу:
    =WEEKDAY(A2;2)=7

    Здесь 2 — параметр, указывающий, что неделя начинается с понедельника (1 = понедельник, 7 = воскресенье).

  5. Нажмите Формат, выберите цвет заливки (например, светло-красный) и подтвердите.

⚠️ Внимание: Если ваша таблица содержит даты в текстовом формате (например, "01.01.2026"), условное форматирование не сработает. Сначала преобразуйте их в формат даты с помощью функции ДАТАЗНАЧ() или инструмента Текст по столбцам.

Ячейки содержат даты в формате Excel (не текст)|Диапазон выделен без пустых строк|Формула адаптирована под первую ячейку диапазона (A2, B5 и т.д.)|Выбран контрастный цвет заливки-->

Способ 2: Формула для динамического выделения (включая сводные таблицы)

Если вам нужно не только визуально выделить воскресенья, но и использовать их в расчётах (например, подсчитать количество воскресений в месяце или просуммировать данные только по этим дням), потребуется формула. Самый надёжный вариант — комбинация WEEKDAY() с SUMPRODUCT() или SUMIFS().

Примеры формул:

  • 📅 Подсчёт воскресений в диапазоне:
    =SUMPRODUCT(--(WEEKDAY(A2:A100;2)=7))

    Здесь -- преобразует логические значения в 1 и 0 для суммирования.

  • 💰 Сумма значений в столбце B, если дата в столбце A — воскресенье:
    =SUMIFS(B2:B100; A2:A100; ">="&ДАТА(2026;1;1); A2:A100; "<="&ДАТА(2026;12;31); A2:A100; WEEKDAY(A2:A100;2)=7)

    Эта формула суммирует данные за 2026 год только по воскресеньям.

⚠️ Внимание: В сводных таблицах условное форматирование по формулам работает иначе. Чтобы подсветить воскресенья в сводной, сначала добавьте вычисляемое поле с формулой =WEEKDAY([@Дата];2)=7, а затем примените к нему условное форматирование по значению ИСТИНА.

Почему WEEKDAY может ошибаться с датами до 1900 года?

Функция WEEKDAY() в Excel использует систему дат, где 1 января 1900 года считается днём 1. Однако исторически известно, что 1900 год не был високосным (хотя Excel ошибочно считает его таковым). Это приводит к сдвигу дней недели для дат до 1900 года. Если вы работаете с архивными данными, используйте альтернативу:

=MOD(A2-2;7)=6

где A2-2 корректирует ошибку Excel, а MOD(...,7)=6 проверяет, что день недели — воскресенье (6 = суббота в системе Excel, но из-за сдвига воскресенье становится 6).

Способ 3: Фильтрация воскресений без формул (для больших таблиц)

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

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

  1. Выделите заголовок столбца с датами.
  2. Нажмите Данные → Фильтр (или комбинацию Ctrl+Shift+L).
  3. Раскройте выпадающий список в столбце с датами и выберите Фильтры по дате → Настраиваемый фильтр.
  4. В первом поле выберите день недели, во втором — равно, в третьем — воскресенье.

Для расширенного фильтра:

  • 📊 Создайте отдельный диапазон критериев с заголовком (например, в ячейке D1 напишите "Дата", а в D2 введите формулу =WEEKDAY(A2;2)=7).
  • 🔍 Перейдите в Данные → Сортировка и фильтр → Расширенный фильтр.
  • Укажите исходный диапазон (например, A1:B100) и диапазон критериев (D1:D2).
  • Выберите опцию Скопировать результат в другое место и укажите целевую ячейку (например, E1).
📊 Какой метод фильтрации вы используете чаще?
Автофильтр
Расширенный фильтр
Формулы (SUMIFS/SUMPRODUCT)
Условное форматирование
Другой

Способ 4: Выделение воскресений с учётом региональных настроек

Excel автоматически подстраивается под региональные настройки системы, что может приводить к неожиданным результатам. Например, в США неделя по умолчанию начинается с воскресенья (WEEKDAY(A2;1)=1), а в России — с понедельника (WEEKDAY(A2;2)=7). Если ваша таблица используется в международной команде, стоит зафиксировать формат независимо от локали.

Универсальная формула для выделения воскресений в любой локали:

=OR(

AND(WEEKDAY(A2;2)=7; $Z$1="РФ"),

AND(WEEKDAY(A2;1)=1; $Z$1="USA")

)

Где $Z$1 — ячейка с указанием страны (можно заменить на фиксированное значение).

Альтернативный подход — использование функции TEXT():

=TEXT(A2;"ddd")="вс"

Эта формула вернёт ИСТИНА для воскресений независимо от региональных настроек, так как "ddd" всегда возвращает сокращённое название дня недели на языке системы ("вс" для русского, "Sun" для английского).

=MOD(A2-2;7)=6

Эта формула работает одинаково во всех локалях, так как опирается на внутреннюю систему счёта дней Excel (где 1 января 1900 года — день 1, а воскресенье всегда соответствует остатку 6 при делении на 7).-->

Способ 5: Автоматизация через VBA (для регулярных отчётов)

Если вы еженедельно или ежемесячно генерируете отчёты, где требуется выделять воскресенья, имеет смысл написать макрос на VBA. Это позволит применять форматирование или фильтрацию в один клик, а также обрабатывать данные из внешних источников (например, выгрузок из 1С или CRM).

Пример макроса для выделения воскресений в выбранном диапазоне:

Sub HighlightSundays()

Dim rng As Range

Dim cell As Range

Dim sundayColor As Long

' Задаём цвет выделения (RGB: 255, 200, 200 — светло-красный)

sundayColor = RGB(255, 200, 200)

' Проверяем, выделен ли диапазон

On Error Resume Next

Set rng = Selection.SpecialCells(xlCellTypeConstants, xlNumbers)

On Error GoTo 0

If rng Is Nothing Then

MsgBox "Выделите диапазон с датами!", vbExclamation

Exit Sub

End If

' Проходим по каждой ячейке

For Each cell In rng

If Weekday(cell.Value, vbMonday) = 7 Then

cell.Interior.Color = sundayColor

Else

cell.Interior.ColorIndex = xlNone

End If

Next cell

End Sub

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Вернитесь в Excel, выделите диапазон с датами и запустите макрос (Alt + F8 → HighlightSundays → Выполнить).

⚠️ Внимание: Макрос будет работать только для ячеек с форматом Дата. Если в диапазоне есть текстовые значения (например, "01.01.2026"), они будут проигнорированы. Чтобы обработать и их, добавьте в начало макроса строку:

cell.Value = CDate(cell.Value)

но учтите, что это может вызвать ошибку для некорректных данных.

Сравнение методов: какой выбрать для вашей задачи

Чтобы помочь вам определиться с оптимальным способом, мы составили сравнительную таблицу:

Метод Сложность Динамичность Подходит для больших данных Требует VBA Локализация
Условное форматирование ❌ (нужно обновлять) ⚠️ (может тормозить) Зависит от региона
Формулы (SUMIFS/SUMPRODUCT) ⭐⭐ Зависит от региона
Фильтрация Зависит от региона
Универсальная формула (MOD/TEXT) ⭐⭐⭐ ✅ Не зависит
VBA-макрос ⭐⭐⭐⭐ ✅ Не зависит

Для разовых задач (например, подсветить воскресенья в отчёте за месяц) достаточно условного форматирования или фильтра. Если вам нужно автоматически обрабатывать данные (например, еженедельные продажи по дням), лучше использовать формулы или VBA. Для международных проектов обязательно тестируйте решения на универсальность или используйте метод с MOD().

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

❓ Почему моя формула =WEEKDAY(A2)=1 не находит воскресенья?

Функция WEEKDAY() без второго аргумента использует настройки системы по умолчанию. В большинстве локалей (включая Россию) WEEKDAY(A2)=1 соответствует понедельнику, а не воскресенью. Чтобы получить воскресенье, используйте:

=WEEKDAY(A2;1)=1  ' для локалей, где неделя начинается с воскресенья (США)

=WEEKDAY(A2;2)=7 ' для локалей, где неделя начинается с понедельника (Россия)

❓ Как выделить все воскресенья в сводной таблице?

Сводные таблицы не поддерживают условное форматирование по формулам напрямую. Обходной путь:

  1. Добавьте в исходные данные столбец с формулой =WEEKDAY([@Дата];2)=7 (предполагается, что даты в столбце "Дата").
  2. Обновите сводную таблицу, добавив это поле в область Значения (оно будет показывать ИСТИНА/ЛОЖЬ).
  3. Примените условное форматирование к сводной таблице по значению ИСТИНА.
❓ Можно ли выделить воскресенья в Google Sheets?

Да, все описанные методы работают и в Google Sheets, за исключением VBA. Для условного форматирования используйте ту же формулу =WEEKDAY(A2;2)=7, но в настройках правила выберите Настраиваемая формула. Для фильтрации воспользуйтесь функцией FILTER():

=FILTER(A2:B100; WEEKDAY(A2:A100;2)=7)
❓ Как выделить воскресенья, которые являются последними в месяце?

Используйте комбинацию функций WEEKDAY() и EOMONTH():

=AND(

WEEKDAY(A2;2)=7,

A2=EOMONTH(A2;0)-MOD(EOMONTH(A2;0)-WEEKDAY(EOMONTH(A2;0);2)+1;7)

)

Эта формула проверяет, что дата — воскресенье (WEEKDAY=7) и совпадает с последним воскресеньем месяца.

❓ Почему после копирования данных из внешнего источника воскресенья не выделяются?

Скорее всего, даты скопированы как текст. Проверьте формат ячеек и при необходимости преобразуйте данные:

  1. Выделите проблемный столбец.
  2. Перейдите в Данные → Текст по столбцам → Готово.
  3. Убедитесь, что формат ячеек изменён на Дата.

Если это не помогло, используйте функцию ДАТАЗНАЧ() в соседнем столбце, например: =ДАТАЗНАЧ(A2).