Превращаем даты в дни недели: зачем это нужно в Excel
Вы когда-нибудь открывали таблицу с сотнями дат и понимали, что без информации о дне недели эти данные практически бесполезны? Возможно, вам нужно проанализировать продажи по дням недели, спланировать график работы сотрудников или просто разобраться, на какой день выпадает важное событие. Excel предлагает минимум 7 различных способов определить день недели — от элементарных функций до сложных формул с учетом праздников и региональных особенностей.
Эта статья не просто перечислит функции — она научит вас выбирать оптимальный метод в зависимости от задачи. Например, знали ли вы, что функция ТЕКСТ может вернуть день недели на русском языке, а ДЕНЬНЕД — только номер? Или что с помощью ВЫБОР можно создать кастомное отображение, где понедельник будет не "1", а "Рабочий день"? Мы разберём даже такие нюансы, как автоматическое подсвечивание выходных дней в больших таблицах — это сэкономит вам часы ручной работы.
Способ 1: Функция ДЕНЬНЕД — базовый инструмент с подводными камнями
Начнём с самой простой функции, которая есть во всех версиях Excel — ДЕНЬНЕД(дата; [возврат]). Она возвращает номер дня недели для указанной даты, где по умолчанию воскресенье = 1, а суббота = 7. Но здесь есть три критичных нюанса:
- 📅 Формат аргумента: функция принимает дату в виде ссылки на ячейку (например,
A1), результата другой функции (например,ДАТА(2026;5;15)) или последовательности чисел (например,45415для 15 мая 2026). - 🔄 Параметр "возврат": если его опустить, воскресенье будет "1". Но можно указать
2, чтобы понедельник стал "1" (европейская система), или3, где понедельник = 0. - ⚠️ Ловушка для новичков: Excel хранит даты как числа (количество дней с 1 января 1900 года). Если ваша функция возвращает странное большое число — проверьте формат ячейки!
Пример использования:
=ДЕНЬНЕД(A1; 2)
⚠️ Внимание: Если вы работаете с данными из внешних источников (например, выгружаете даты из 1С), сначала проверьте, в каком формате они хранятся. Часто "даты" на самом деле являются текстом — в этом случаеДЕНЬНЕДвернёт ошибку#ЗНАЧ!. ИспользуйтеДАТАЗНАЧдля преобразования.
Способ 2: Функция ТЕКСТ — день недели на русском языке
Если вам нужны не цифры, а слова — "понедельник", "вторник" и так далее — используйте функцию ТЕКСТ(дата; "дддд"). Это универсальный инструмент форматирования, который преобразует дату в текстовый день недели на языке вашей системы.
Ключевые особенности:
- 🌍 Локализация: Если ваш Excel настроен на русский язык, функция вернёт "понедельник", на английском — "Monday". Чтобы изменить язык, нужно поменять настройки системы (не Excel!).
- 📏 Форматы отображения:
"ддд"— сокращённое название ("пн", "вт")"дддд"— полное название ("понедельник")"ddd"— сокращённое на английском ("Mon", "Tue")
- 🔗 Комбинация с другими функциями: Можно вложить
ТЕКСТвЕСЛИ, чтобы, например, подсвечивать выходные.
Пример с условным форматированием:
=ЕСЛИ(ИЛИ(ТЕКСТ(A1;"дддд")="суббота"; ТЕКСТ(A1;"дддд")="воскресенье"); "Выходной"; "Рабочий день")
| Формат | Пример кода | Результат для 15.05.2026 (среда) |
|---|---|---|
| "ддд" | =ТЕКСТ(A1;"ддд") | ср |
| "дддд" | =ТЕКСТ(A1;"дддд") | среда |
| "ddd" | =ТЕКСТ(A1;"ddd") | Wed |
| "dddd" | =ТЕКСТ(A1;"dddd") | Wednesday |
Способ 3: ВЫБОР + ДЕНЬНЕД — кастомные названия дней
Иногда стандартные названия дней недели не подходят. Например, вам нужно:
- 📊 Отображать "Рабочий день" вместо "понедельник-пятница"
- 🏭 Использовать производственный календарь ("День 1", "День 2")
- 🎭 Создать тематическое оформление ("День Меркурия", "День Венеры")
В таких случаях комбинация ВЫБОР + ДЕНЬНЕД становится спасением. Функция ВЫБОР позволяет назначить каждому дню недели своё уникальное значение.
Пример для производственного календаря (понедельник = День 1, воскресенье = День 7):
=ВЫБОР(ДЕНЬНЕД(A1;2); "День 1"; "День 2"; "День 3"; "День 4"; "День 5"; "День 6"; "День 7")
А вот как можно автоматически определять тип дня для графика работы:
=ВЫБОР(ДЕНЬНЕД(A1;2);
"Рабочий день (полный)";
"Рабочий день (полный)";
"Рабочий день (полный)";
"Рабочий день (полный)";
"Рабочий день (сокращённый)";
"Выходной";
"Выходной")
☑️ Проверка формулы ВЫБОР
Способ 4: Условное форматирование — визуализация дней недели
Когда таблица содержит сотни дат, гораздо удобнее визуально выделять выходные или конкретные дни, чем читать текстовые значения. Для этого идеально подходит условное форматирование с формулами.
Алгоритм настройки:
- Выделите диапазон с датами.
- Перейдите на вкладку
Главная → Условное форматирование → Создать правило. - Выберите тип правила
Использовать формулу для определения форматируемых ячеек. - Введите формулу (примеры ниже).
- Задайте формат (например, красный фон для выходных).
Формулы для разных задач:
- 🔴 Выделить выходные (суббота и воскресенье):
=ИЛИ(ДЕНЬНЕД(A1;2)>5; ТЕКСТ(A1;"дддд")="воскресенье") - 🟢 Выделить рабочие дни (пн-пт):
=ДЕНЬНЕД(A1;2)<6 - 🟣 Выделить конкретный день (например, среду):
=ДЕНЬНЕД(A1;2)=3 - 🟡 Выделить даты, приходящиеся на 1-е число месяца (если оно не выходной):
=И(ДЕНЬ(A1)=1; ДЕНЬНЕД(A1;2)<6)
⚠️ Внимание: При копировании формул условного форматирования Excel автоматически подстраивает ссылки под новый диапазон. Если вам нужно зафиксировать столбец (например, всегда проверять столбец A), используйте абсолютные ссылки:$A1вместоA1.
Как применить форматирование ко всей таблице автоматически?
1. Выделите первую ячейку с датой и создайте правило условного форматирования.
2. В формуле используйте относительные ссылки (например, A1).
3. Примените правило ко всему диапазону дат — Excel автоматически скорректирует ссылки для каждой ячейки (например, для ячейки B5 формула станет B5).
Способ 5: Power Query — автоматическое определение дней в больших данных
Если вы работаете с тысячами строк данных (например, выгружаете отчёты из CRM или бухгалтерских программ), ручное добавление столбца с днём недели станет кошмаром. Здесь на помощь приходит Power Query — инструмент для преобразования данных, встроенный в Excel 2016+.
Пошаговая инструкция:
- Выделите вашу таблицу и перейдите на вкладку
Данные → Из таблицы/диапазона(илиПолучить данные → Из таблицы/диапазонав Excel 2019+). - В открывшемся редакторе Power Query выделите столбец с датами.
- Перейдите на вкладку
Добавить столбец → Дата и время → День → Название дня. - Выберите формат отображения (полное или сокращённое название).
- Нажмите
Закрыть и загрузить— новый столбец с днями недели появится в вашей таблице.
Преимущества этого метода:
- ⚡ Автоматизация: При обновлении исходных данных столбец с днями недели обновится автоматически.
- 🔄 Гибкость: Можно добавить сразу несколько столбцов — например, название дня, номер дня недели и квартал.
- 🌐 Локализация: Power Query учитывает языковые настройки системы (в отличие от формул, где иногда приходится вручную прописывать дни на нужном языке).
Для продвинутых пользователей: в Power Query можно создать кастомную функцию, которая будет не только определять день недели, но и проверять, является ли дата праздничной (на основе отдельной таблицы с праздниками).
Способ 6: VBA-макросы — для сложных задач и автоматизации
Когда стандартных функций недостаточно (например, нужно учитывать региональные праздники или создавать динамические календари), на помощь приходит VBA. С помощью макросов можно:
- 📅 Создавать календари с автоматическим подсвечиванием выходных и праздников.
- 🔄 Динамически обновлять дни недели при изменении дат.
- 📊 Генерировать отчёты по дням недели (например, суммировать продажи по понедельникам).
Пример макроса, который добавляет столбец с днями недели на русском языке:
Sub AddWeekdayColumn()
Dim rng As Range
Dim cell As Range
Dim lastRow As Long
' Определяем последний ряд с данными в столбце A
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
Set rng = Range("A1:A" & lastRow)
' Добавляем новый столбец B с заголовком
Range("B1").Value = "День недели"
' Заполняем столбец днями недели
For Each cell In rng
If IsDate(cell.Value) Then
cell.Offset(0, 1).Value = Format(cell.Value, "dddd")
End If
Next cell
' Автоподбор ширины столбца
Columns("B").AutoFit
End Sub
Как использовать этот макрос:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Закройте редактор и запустите макрос через
Вид → Макросы → AddWeekdayColumn → Выполнить.
⚠️ Внимание: Перед запуском макросов убедитесь, что в настройках Excel разрешено выполнение макросов (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Настройки макросов). В противном случае макрос не сработает.
Способ 7: Динамические массивы (Excel 365) — будущее работы с датами
Если вы используете Excel 365 или Excel 2021, у вас есть доступ к динамическим массивам — революционному инструменту, который позволяет обрабатывать целые диапазоны данных одной формулой. Для дней недели это означает возможность:
- 🔥 Одношаговое заполнение: Одна формула вернёт дни недели для всего столбца.
- 🔄 Автоматическое обновление: При добавлении новых дат результат расширяется автоматически.
- 📊 Комбинация с другими функциями: Например, можно сразу подсчитать количество рабочих дней.
Пример: вернуть дни недели для всего столбца A (начиная с A2):
=ТЕКСТ(A2:A100;"дддд")
Эта формула автоматически заполнит все ячейки рядом с датами в столбце A (от A2 до A100 или до первой пустой ячейки).
Более сложный пример: подсчёт рабочих дней (пн-пт) в диапазоне:
=СУММПРОИЗВ(--(ДЕНЬНЕД(A2:A100;2)<6); --(A2:A100<>""))
Эта формула:
- Проверяет каждый день недели (
ДЕНЬНЕД(...,2)<6— рабочие дни). - Игнорирует пустые ячейки (
A2:A100<>""). - Возвращает количество рабочих дней в диапазоне.
FAQ: Ответы на частые вопросы о днях недели в Excel
Можно ли в Excel определить, является ли день праздничным?
Стандартных функций для этого нет, но есть три способа:
- Ручной список: Создайте таблицу с датами праздников и используйте
ВПРилиПОИСКПОЗдля проверки. - Power Query: Загрузите календарь праздников (например, с data.gov.ru) и объедините с вашими данными.
- VBA: Напишите макрос, который будет проверять даты по заранее определённому списку.
Пример формулы с ручным списком (предположим, праздники в диапазоне D2:D10):
=ЕСЛИ(СЧЁТЕСЛИ($D$2:$D$10; A1)>0; "Праздник"; ТЕКСТ(A1; "дддд"))
Почему функция ДЕНЬНЕД возвращает ошибку #ЗНАЧ?
Это происходит в трёх случаях:
- Ячейка содержит текст, а не дату. Проверьте формат ячейки (должен быть "Дата"). Используйте
ДАТАЗНАЧдля преобразования текста в дату. - Неправильный регион: В некоторых региональных настройках Excel использует другую систему дат. Проверьте
Файл → Параметры → Язык → Региональные параметры. - Отрицательная дата: Excel не поддерживает даты до 1 января 1900 года. Если ваша дата раньше — используйте альтернативные методы (например, текстовые функции).
Как сделать так, чтобы день недели обновлялся автоматически при изменении даты?
Есть четыре варианта:
- Формулы: Используйте
ТЕКСТилиДЕНЬНЕД— они пересчитываются автоматически. - Power Query: Как описано в Способе 5, это самый надёжный метод для больших данных.
- Таблицы Excel: Преобразуйте диапазон в таблицу (
Ctrl + T), и формулы будут обновляться при добавлении новых строк. - VBA: Напишите макрос, который срабатывает при изменении ячейки (событие
Worksheet_Change).
Пример кода для автоматического обновления при изменении даты:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
For Each cell In Target
If cell.Column = 1 Then ' Если изменена ячейка в столбце A
cell.Offset(0, 1).Value = Format(cell.Value, "dddd")
End If
Next cell
End Sub
Можно ли в Excel получить название дня недели на английском, если у меня русская версия?
Да, есть три способа:
- Функция ТЕКСТ с английским форматом:
=ТЕКСТ(A1; "[$-409]dddd")Здесь
409— это код локали для английского (США). - Power Query: При загрузке данных выберите английский язык в параметрах региона.
- VBA: Используйте функцию
Formatс явным указанием локали:=Format(cell.Value, "dddd", vbMonday, vbUseSystemDayOfWeek)Но для этого потребуется написать пользовательскую функцию.
Обратите внимание: в некоторых версиях Excel код локали может не работать. В этом случае проще создать таблицу соответствия русских и английских названий и использовать ВПР.
Как в Excel посчитать количество конкретных дней недели в диапазоне?
Используйте функцию СУММПРОИЗВ (или SUMPRODUCT в английской версии) с условием. Примеры:
- Количество понедельников в диапазоне
A1:A100:=СУММПРОИЗВ(--(ДЕНЬНЕД(A1:A100;2)=1)) - Количество выходных (суббот и воскресений):
=СУММПРОИЗВ(--(ДЕНЬНЕД(A1:A100;2)>5)) - Количество рабочих дней (пн-пт):
=СУММПРОИЗВ(--(ДЕНЬНЕД(A1:A100;2)<6))
Для динамических массивов (Excel 365) можно упростить формулу, убрав СУММПРОИЗВ:
=СЧЁТЕСЛИ(ДЕНЬНЕД(A1:A100;2); 1)