При попытке преобразовать текстовые дни недели («понедельник», «вторник»...) в числовые значения (1–7) для анализа данных в Excel пользователи сталкиваются с двумя проблемами: программа не распознает текст как дату, а стандартные функции возвращают номер дня в неделе для текущей даты, а не для произвольного текстового значения. Например, если в ячейке A1 записано «среда», функция =ДЕНЬНЕД(A1) вернет ошибку #ЗНАЧ!, а не число 3.
Решение зависит от формата исходных данных. Если дни недели записаны на русском языке (или другом языке интерфейса Excel), потребуется комбинация функций ВЫБОР() или ПОИСКПОЗ() с массивом названий. Для английских сокращений (Mon, Tue...) подойдет функция WEEKDAY() с предварительным преобразованием текста в дату. Ниже разобраны оба сценария с примерами для Excel 2016–2023 и Excel Online.
Почему стандартные функции не работают с текстовыми днями недели
Функции ДЕНЬНЕД() (WEEKDAY() в английской версии) и НОМНЕДЕЛИ() предназначены для работы с датами, а не с текстом. Они принимают аргумент в формате даты/времени и возвращают:
- 📅 1–7 — номер дня недели (по умолчанию: 1=воскресенье в Excel для Windows, 1=понедельник в Excel для Mac).
- 🔢 Ошибку #ЗНАЧ! — если передать текст («понедельник») вместо даты.
- ⚠️ Неправильный результат — если текст случайно совпадает с форматом даты (например, «1-янв» будет обработано как дата).
Пример ошибки: если в ячейке A1 записано «четверг», формула =ДЕНЬНЕД(A1) не сработает, так как Excel не может автоматически преобразовать текст в дату. Для корректной обработки требуется промежуточное преобразование текста в числовой индекс.
⚠️ Внимание: В Excel для Mac и Windows нумерация дней недели по умолчанию различается. В WindowsДЕНЬНЕД()возвращает 1 для воскресенья, в Mac — для понедельника. Чтобы унифицировать результат, используйте второй аргумент функции:=ДЕНЬНЕД(дата; 2)(1=понедельник).
Способ 1: Функция ВЫБОР() для русских названий дней
Если дни недели записаны на русском языке в полной форме («понедельник», «вторник»...), используйте функцию ВЫБОР() с вложенной функцией ПОИСКПОЗ(). Эта комбинация сопоставляет текст с массивом названий и возвращает соответствующий номер:
=ВЫБОР(ПОИСКПОЗ(A1; {"понедельник"; "вторник"; "среда"; "четверг"; "пятница"; "суббота"; "воскресенье"}; 0); 1; 2; 3; 4; 5; 6; 7)
Как это работает:
ПОИСКПОЗ()ищет текст изA1в массиве названий дней и возвращает его позицию (например, «среда» → 3).ВЫБОР()использует эту позицию как индекс для возврата числа (1–7).
Для английских названий (Monday, Tuesday...) замените массив в формуле: {"Monday"; "Tuesday"; ...; "Sunday"}.
- ✅ Дни недели записаны без опечаток (регистр не важен)
- ✅ Используется точный массив названий (русский или английский)
- ✅ В ячейке нет лишних пробелов или символов
- ✅ Формула введена как формула массива (в новых версиях Excel не требуется)
-->
Способ 2: Функция ПОИСКПОЗ() для сокращенных названий
Если дни недели записаны в сокращенном виде («пн», «вт»...), модифицируйте массив в ПОИСКПОЗ():
=ПОИСКПОЗ(A1; {"пн"; "вт"; "ср"; "чт"; "пт"; "сб"; "вс"}; 0)
Эта формула вернет номер дня (1–7) без дополнительных функций. Для английских сокращений (Mon, Tue...) используйте массив: {"Mon"; "Tue"; "Wed"; "Thu"; "Fri"; "Sat"; "Sun"}.
Обратите внимание: функция чувствительна к регистру. Если в ячейке записано «Пн» (с заглавной буквы), а в массиве — «пн» (строчные), формула вернет ошибку. Чтобы избежать этого, используйте функцию НИЖНРЕГ():
=ПОИСКПОЗ(НИЖНРЕГ(A1); {"пн"; "вт"; "ср"; "чт"; "пт"; "сб"; "вс"}; 0)
⚠️ Внимание: Если в данных встречаются опечатки (например, «средаа» вместо «среда»), формула вернет ошибку. Для обработки таких случаев добавьте проверку черезЕСЛИОШИБКА():=ЕСЛИОШИБКА(ПОИСКПОЗ(A1; {"пн";...; "вс"}; 0); "Ошибка в названии дня")Способ 3: Преобразование текста в дату для функции ДЕНЬНЕД()
Если дни недели записаны как части даты (например, «1 января 2023, понедельник»), можно извлечь дату и применить
ДЕНЬНЕД(). Для этого:
- Используйте
ЛЕВСИМВ()илиПРАВСИМВ(), чтобы выделить часть строки с датой.- Преобразуйте текст в дату с помощью
ДАТАЗНАЧ().- Примените
ДЕНЬНЕД()к полученной дате.Пример для ячейки с текстом «12.05.2023, пятница»:
=ДЕНЬНЕД(ДАТАЗНАЧ(ЛЕВСИМВ(A1; 10)); 2)Здесь
ЛЕВСИМВ(A1; 10)извлекает «12.05.2023», аДАТАЗНАЧ()преобразует его в дату. Аргумент2вДЕНЬНЕД()обеспечивает нумерацию с понедельника (1).
Формат исходных данных Рекомендуемая формула Пример результата Полное название на русском («понедельник») =ВЫБОР(ПОИСКПОЗ(A1; {"понедельник";...; "воскресенье"}; 0); 1;...;7)1 Сокращенное название («пн», «вт»...) =ПОИСКПОЗ(A1; {"пн";...; "вс"}; 0)3 Английское название («Monday») =ПОИСКПОЗ(A1; {"Monday";...; "Sunday"}; 0)1 Текст с датой («12.05.2023, пятница») =ДЕНЬНЕД(ДАТАЗНАЧ(ЛЕВСИМВ(A1;10)); 2)5 Полные названия на русском ("понедельник")
Сокращения ("пн", "вт")
Английские названия ("Monday", "Tuesday")
Другое (указываю в комментариях)-->
Способ 4: Использование Power Query для массовой обработки
Если данных много (тысячи строк), ручное применение формул неэффективно. В этом случае используйте Power Query (вкладка
Данные→Из таблицы/диапазона):
- Загрузите данные в Power Query.
- Выделите столбец с днями недели.
- Перейдите на вкладку
Добавить столбец→Настраиваемый столбец.- Введите формулу для преобразования (пример для русского языка):
if [День недели] = "понедельник" then 1
else if [День недели] = "вторник" then 2
...
else if [День недели] = "воскресенье" then 7
else null
После применения преобразования загрузите данные обратно в Excel. Преимущество метода: обработка происходит один раз, а результат сохраняется в таблице без формул.
Способ 5: VBA-макрос для автоматизации
Если преобразование требуется выполнять регулярно, создайте пользовательскую функцию на VBA:
- Нажмите
Alt + F11, чтобы открыть редактор VBA.- Вставьте новый модуль (
Insert→Module).- Добавьте код:
Function DayToNumber(dayName As String) As Integer
Dim days(1 To 7) As String
days(1) = "понедельник": days(2) = "вторник": days(3) = "среда"
days(4) = "четверг": days(5) = "пятница": days(6) = "суббота"
days(7) = "воскресенье"
For i = 1 To 7
If LCase(dayName) = LCase(days(i)) Then
DayToNumber = i
Exit Function
End If
Next i
DayToNumber = CVErr(xlErrValue) ' Ошибка, если день не найден
End Function
Теперь в Excel можно использовать функцию
=DayToNumber(A1). Макрос учитывает регистр и возвращает ошибку, если название дня не распознано.Как адаптировать макрос для английских дней недели
Замените массив
daysна английские названия:days(1) = "Monday": days(2) = "Tuesday": days(3) = "Wednesday"
...
days(7) = "Sunday"
Или добавьте поддержку обоих языков через дополнительную проверку.
Ошибки и их решения
При работе с преобразованием дней недели в числа пользователи часто сталкиваются с следующими проблемами:
- 🔴 Ошибка #ЗНАЧ! — возникает, если название дня не найдено в массиве. Проверьте регистр, опечатки и соответствие языка (русский/английский).
- 🔴 Неправильный номер дня — если используется
ДЕНЬНЕД()без второго аргумента, нумерация может начинаться с воскресенья (зависит от настроек системы). Всегда указывайтеДЕНЬНЕД(дата; 2)для унификации.- 🔴 Формула не обновляется — если данные подгружаются из внешнего источника, включите автоматический пересчет (
Формулы→Параметры вычислений→Автоматически).Для диагностики ошибок используйте пошаговое вычисление формул (
Формулы→Вычислить формулу). Это поможет определить, на каком этапе происходит сбой.FAQ: Частые вопросы
Как сделать, чтобы понедельник был 1, а воскресенье — 7?
Используйте второй аргумент в функции
ДЕНЬНЕД():
=ДЕНЬНЕД(дата; 2)— нумерация с понедельника (1) до воскресенья (7).=ДЕНЬНЕД(дата; 1)— нумерация с воскресенья (1) до субботы (7) (по умолчанию в Windows).Для текстовых дней недели настройте массив в
ВЫБОР()илиПОИСКПОЗ()так, чтобы «понедельник» соответствовал 1.Можно ли преобразовать числа обратно в дни недели?
Да, используйте функцию
ВЫБОР()илиИНДЕКС():=ВЫБОР(A1; "понедельник"; "вторник"; "среда"; "четверг"; "пятница"; "суббота"; "воскресенье")Или для английских названий:
=ИНДЕКС({"Monday";"Tuesday";...;"Sunday"}; A1)Как обработать дни недели на украинском/белорусском языке?
Замените массив названий в формуле на нужный язык. Например, для украинского:
=ПОИСКПОЗ(A1; {"понідельник"; "вівторок"; "середа"; "четвер"; "п'ятниця"; "субота"; "неділя"}; 0)Убедитесь, что кодировка символов в Excel поддерживает кириллицу (обычно проблем не возникает).
Почему формула работает в одной книге, но не работает в другой?
Возможные причины:
- 📌 Разные языковые настройки Excel (например, английская и русская версии). Проверьте названия дней в формуле.
- 📌 Разные региональные параметры даты (влияет на
ДЕНЬНЕД()). Используйте второй аргумент для унификации.- 📌 В одной из книг включен режим
Ручной пересчет(Формулы→Параметры вычислений).Как преобразовать дни недели в числа в Google Sheets?
В Google Таблицах используйте аналогичные функции, но с английскими названиями:
=CHOOSE(MATCH(A1; {"Monday";...; "Sunday"}; 0); 1;...;7)=WEEKDAY(DATEVALUE(LEFT(A1; 10)))— для текста с датой.Обратите внимание: в Google Sheets
WEEKDAY()по умолчанию возвращает 1 для воскресенья. Чтобы изменить это, добавьте второй аргумент:=WEEKDAY(дата; 2)(1=понедельник).