Как в Excel сделать день недели числом: от понедельника=1 до воскресенья=7

При попытке преобразовать текстовые дни недели («понедельник», «вторник»...) в числовые значения (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)

Как это работает:

  1. ПОИСКПОЗ() ищет текст из A1 в массиве названий дней и возвращает его позицию (например, «среда» → 3).
  2. ВЫБОР() использует эту позицию как индекс для возврата числа (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, понедельник»), можно извлечь дату и применить ДЕНЬНЕД(). Для этого:

  1. Используйте ЛЕВСИМВ() или ПРАВСИМВ(), чтобы выделить часть строки с датой.
  2. Преобразуйте текст в дату с помощью ДАТАЗНАЧ().
  3. Примените ДЕНЬНЕД() к полученной дате.

Пример для ячейки с текстом «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 (вкладка ДанныеИз таблицы/диапазона):

  1. Загрузите данные в Power Query.
  2. Выделите столбец с днями недели.
  3. Перейдите на вкладку Добавить столбецНастраиваемый столбец.
  4. Введите формулу для преобразования (пример для русского языка):

if [День недели] = "понедельник" then 1

else if [День недели] = "вторник" then 2

...

else if [День недели] = "воскресенье" then 7

else null

После применения преобразования загрузите данные обратно в Excel. Преимущество метода: обработка происходит один раз, а результат сохраняется в таблице без формул.

Способ 5: VBA-макрос для автоматизации

Если преобразование требуется выполнять регулярно, создайте пользовательскую функцию на VBA:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте новый модуль (InsertModule).
  3. Добавьте код:

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=понедельник).