Почему Excel не распознаёт дату в ячейке и как это исправить
Вы когда-нибудь сталкивались с ситуацией, когда в ячейке Excel хранится текст вроде "Заказ от 15.03.2026 на сумму 1200 руб.", а вам нужна только дата 15.03.2026? Или когда дата записана как число 45341, но Excel упорно не хочет её распознавать? Это классическая проблема работы с неструктурированными данными, которая отнимает часы у аналитиков, бухгалтеров и менеджеров.
В 90% случаев Excel не извлекает дату автоматически потому, что ячейка имеет текстовый формат или содержит посторонние символы (буквы, знаки валюты, пробелы). Например, строка "Договор №А-12 от 05/04/2026" для программы — это просто текст, а не дата. В этой статье мы разберём 7 способов извлечения дат из любых форматов, включая скрытые приёмы с регулярными выражениями и VBA, которые экономят часы ручной работы.
Важно понимать: метод извлечения зависит от исходного формата данных. Дата может быть:
- 📅 Встроена в текст (например,
"Срок действия до 31.12.2026") - 🔢 Замаскирована под число (например,
45678— это дата в числовом формате Excel) - 🗂️ Разбита по нескольким ячейкам (день, месяц и год в отдельных колонках)
- 🔄 Испорчена при импорте (например, американский формат
MM/DD/YYYYвместоDD.MM.YYYY)
Способ 1: Функция ДАТАЗНАЧ для чисел и стандартных форматов
Если ваша дата хранится как число (например, 45341) или в текстовом виде, но в стандартном формате (DD.MM.YYYY, DD/MM/YYYY и т.д.), то проще всего использовать функцию =ДАТАЗНАЧ(). Она преобразует текстовое представление даты в числовой формат, который Excel распознаёт как дату.
Примеры использования:
=ДАТАЗНАЧ("15.03.2026") → вернёт 45341 (дата в числовом формате)
=ДАТАЗНАЧ(A1) → извлечёт дату из ячейки A1, если там текст "15/03/2026"
Обратите внимание: функция ДАТАЗНАЧ не работает если:
- ❌ В тексте есть лишние символы (например,
"Дата: 15.03.2026") - ❌ Формат даты нестандартный (например,
"15 марта 2026"или"2026-03-15") - ❌ Ячейка содержит ошибку или пуста
⚠️ Внимание: В русских версиях Excel функция называетсяДАТАЗНАЧ, а в английских —DATEVALUE. Если формула не работает, проверьте язык интерфейса или используйте=DATEVALUE(A1).
☑️ Подготовка данных для ДАТАЗНАЧ
Способ 2: Извлечение даты из текста с помощью ЛЕВСИМВ, ПСТР и ПРАВСИМВ
Когда дата встроена в текст (например, "Отчёт за март 2026 года, дата формирования 31.03.2026"), функции ДАТАЗНАЧ недостаточно. Здесь пригодятся текстовые функции:
- 🔍
ПОИСК(искомая_подстрока; текст)— находит позицию символа в строке - 📏
ПСТР(текст; начальная_позиция; количество_символов)— вырезает фрагмент - ←
ЛЕВСИМВ(текст; количество_символов)— берёт символы слева - →
ПРАВСИМВ(текст; количество_символов)— берёт символы справа
Пример: извлечём дату из текста "Срок оплаты до 15.04.2026":
=ДАТАЗНАЧ(ПСТР(A1; ПОИСК("."; A1)-2; 10))
Разберём формулу:
ПОИСК("."; A1)находит позицию первой точки (в нашем случае это 15-й символ).ПОИСК("."; A1)-2отступает на 2 символа влево (чтобы захватить день).ПСТР(A1; ...; 10)вырезает 10 символов начиная с найденной позиции (получаем"15.04.2026").ДАТАЗНАЧпреобразует вырезанный текст в дату.
⚠️ Внимание: Этот метод работает только если формат даты в тексте фиксированный (например, всегдаDD.MM.YYYY). Если в данных встречаются разные форматы (точки, тире, слэши), используйте способ 4 сТЕКСТПОСЛЕиТЕКСТДО.
| Исходный текст в ячейке A1 | Формула | Результат |
|---|---|---|
"Договор №12 от 05.06.2026" |
=ДАТАЗНАЧ(ПСТР(A1;12;10)) |
05.06.2026 |
"Срок: 10/07/2026" |
=ДАТАЗНАЧ(ПСТР(A1;7;10)) |
10.07.2026 |
"2026-08-20Т14:30:00" (ISO-формат) |
=ДАТАЗНАЧ(ЛЕВСИМВ(A1;10)) |
20.08.2026 |
Способ 3: Разделение даты по символам (текст по столбцам)
Если дата в ячейке записана в нестандартном формате (например, "2026-03-15" или "15/03/2026"), но разделители одинаковые (тире, слэш, точка), можно использовать инструмент "Текст по столбцам":
- Выделите столбец с датами.
- Перейдите на вкладку
Данные → Текст по столбцам. - Выберите
С разделителями→Далее. - Укажите разделитель (например, тире
-или слэш/). - На шаге
Формат данных столбцавыберите для каждого столбца (день, месяц, год) форматДата (DMY).
После разделения дата автоматически преобразуется в корректный формат. Этот метод особенно полезен при импорте данных из CSV или SQL, где даты часто записаны в нестандартном виде.
Способ 4: Функции ТЕКСТПОСЛЕ и ТЕКСТДО (Excel 365 и 2021)
В новых версиях Excel (2021 и Microsoft 365) появились мощные функции для работы с текстом: ТЕКСТПОСЛЕ и ТЕКСТДО. Они позволяют извлекать даты даже из сложных строк без ручного подсчёта позиций.
Пример: извлечём дату из текста "Поставка товара запланирована на 2026-05-10":
=ДАТАЗНАЧ(ТЕКСТПОСЛЕ(A1; "на "))
Формула находит текст после слова "на " и преобразует его в дату. Аналогично можно использовать ТЕКСТДО, если дата стоит перед определённым словом:
=ДАТАЗНАЧ(ТЕКСТДО(A1; " запланирована"))
Преимущества этого метода:
- ✅ Работает с любым текстом до или после даты
- ✅ Не требует знания точных позиций символов
- ✅ Поддерживает несколько разделителей (например, можно указать массив
{"на"; "от"; "до"})
⚠️ Внимание: ФункцииТЕКСТПОСЛЕиТЕКСТДОдоступны только в Excel 365 и 2021. В старых версиях используйте комбинациюПОИСК+ПСТР(способ 2).
Как извлечь дату, если она в середине текста?
Используйте комбинацию ТЕКСТПОСЛЕ и ТЕКСТДО:
=ДАТАЗНАЧ(ТЕКСТПОСЛЕ(ТЕКСТДО(A1; " до "); " на "))
Эта формула извлечёт дату из текста вида "Действительно с 01.01.2026 до 31.12.2026", вернув 31.12.2026.
Способ 5: Регулярные выражения через Power Query (для сложных случаев)
Если даты в данных записаны в разных форматах (например, "15.03.2026", "15/03/24", "март 15, 2026"), то ручные методы не помогут. Здесь на помощь приходит Power Query — инструмент для преобразования данных, поддерживающий регулярные выражения.
Алгоритм действий:
- Выделите исходные данные и перейдите на вкладку
Данные → Из таблицы/диапазона(Power Query откроется в отдельном окне). - Выберите столбец с датами →
Преобразовать → Извлечь → Текст по образцу. - Введите шаблон для даты, например:
- Для
DD.MM.YYYY:(\d{2}\.\d{2}\.\d{4}) - Для
MM/DD/YY:(\d{2}/\d{2}/\d{2}) - Для текстового месяца:
(\d{2}\s[а-я]+\s\d{4})(например,"15 марта 2026")
- Для
ОК — Power Query создаст новый столбец с извлечёнными датами.Дата через контекстное меню.Пример регулярного выражения для извлечения даты в формате DD.MM.YYYY или DD/MM/YYYY:
(\d{1,2}[./]\d{1,2}[./]\d{2,4})
Способ 6: Макрос VBA для автоматического извлечения дат
Если вам регулярно приходится извлекать даты из больших объёмов данных, стоит автоматизировать процесс с помощью VBA. Ниже приведён макрос, который проходит по выделенному диапазону и извлекает даты в формате DD.MM.YYYY или DD/MM/YYYY:
Sub ExtractDates()
Dim rng As Range
Dim cell As Range
Dim regex As Object
Dim matches As Object
Dim dateStr As String
' Создаём объект для работы с регулярными выражениями
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = "\b\d{1,2}[./]\d{1,2}[./]\d{2,4}\b"
regex.Global = True
' Проходим по каждой ячейке в выделенном диапазоне
For Each cell In Selection
If regex.Test(cell.Value) Then
Set matches = regex.Execute(cell.Value)
' Берём первую найденную дату
dateStr = matches(0).Value
' Заменяем слэши на точки для корректного распознавания
dateStr = Replace(dateStr, "/", ".")
' Преобразуем в дату и записываем в соседнюю ячейку
cell.Offset(0, 1).Value = CDate(dateStr)
cell.Offset(0, 1).NumberFormat = "dd.mm.yyyy"
End If
Next cell
End Sub
Как использовать макрос:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Вернитесь в Excel, выделите диапазон с данными.
- Запустите макрос через
View → Macros → ExtractDates → Run.
Результат: в столбце справа от исходных данных появятся извлечённые даты.
⚠️ Внимание: Макрос ищет первую дату в строке. Если в ячейке несколько дат (например,"С 01.01.2026 по 31.12.2026"), он вернёт только01.01.2026. Для извлечения нескольких дат потребуется модифицировать код.
Способ 7: Исправление "битых" дат (например, 43101 вместо 01.01.2018)
Иногда при импорте данных из внешних источников даты преобразуются в странные числа (например, 43101 вместо 01.01.2018). Это происходит потому, что Excel хранит даты как количество дней с 01.01.1900, но при импорте теряется формат.
Чтобы исправить такие даты:
- Убедитесь, что ячейка имеет числовой формат (не текстовый!).
- Измените формат ячейки на
Датачерез контекстное меню (Формат ячеек → Дата). - Если дата отображается некорректно (например,
04.07.1905вместо01.01.2018), используйте формулу:=ДАТА(1900; 1; 1) + A1 - 2Эта формула компенсирует ошибку 1900 года в Excel, из-за которой даты могут сдвигаться на 2 дня.
| Проблема | Причина | Решение |
|---|---|---|
Дата отображается как 43101 |
Числовой формат без преобразования | Измените формат ячейки на Дата |
Дата сдвинута на 2 дня (например, 04.07.1905 вместо 02.07.1905) |
Ошибка 1900 года в Excel | Используйте формулу =ДАТА(1900;1;1)+A1-2 |
Дата в американском формате (MM/DD/YYYY вместо DD/MM/YYYY) |
Неправильные региональные настройки | Используйте =ДАТАЗНАЧ(ПОДСТАВИТЬ(A1; "/"; ".")) + ручная замена месяца и дня |
Частые ошибки и как их избежать
Даже опытные пользователи Excel сталкиваются с проблемами при извлечении дат. Вот топ-5 ошибок и способы их решения:
- Ошибка #ЗНАЧ! в функции ДАТАЗНАЧ
Причина: Ячейка содержит не только дату, но и текст (например,
"Дата: 15.03.2026").Решение: Предварительно извлеките дату функциями
ПСТР,ТЕКСТПОСЛЕили регулярными выражениями. - Дата отображается как ######
Причина: Ячейка слишком узкая или дата отрицательная (например,
30.02.2026).Решение: Расширьте столбец или проверьте корректность даты.
- Неправильный порядок дня и месяца
Причина: Excel интерпретирует дату в формате
MM/DD/YYYYкак американскую.Решение: Используйте формулу с явным указанием порядка:
=ДАТА(ПРАВСИМВ(A1;4); ПСТР(A1;4;2); ЛЕВСИМВ(A1;2))(для даты в формате
DDMMYYYYбез разделителей) - Дата превращается в 00.01.1900
Причина: Исходное значение не является корректной датой (например, текст
"Нет данных").Решение: Добавьте проверку на ошибки:
=ЕСЛИОШИБКА(ДАТАЗНАЧ(A1); "") - Макрос не находит даты
Причина: Регулярное выражение в VBA не учитывает все возможные форматы.
Решение: Модифицируйте шаблон, например:
regex.Pattern = "\b\d{1,2}[./-]\d{1,2}[./-]\d{2,4}\b"(это позволит находить даты с тире, точками и слэшами).
=ГОД(A1)— вернёт год=МЕСЯЦ(A1)— вернёт месяц (число от 1 до 12)=ДЕНЬ(A1)— вернёт день месяца=ДЕНЬНЕД(A1)— вернёт день недели (1 = воскресенье, 2 = понедельник и т.д.)
FAQ: Ответы на частые вопросы
Как извлечь дату, если она записана словами (например, "пятница, 15 марта 2026 года")?
Используйте комбинацию функций ТЕКСТПОСЛЕ, ПОИСК и ДАТАЗНАЧ:
=ДАТАЗНАЧ(ПОДСТАВИТЬ(ТЕКСТПОСЛЕ(A1; " "); " года"; ""))
Для русскоязычных месяцев (например, "марта") потребуется дополнительная замена на числовые значения с помощью ПОДСТАВИТЬ или ВЫБОР.
Почему после извлечения дата отображается как 30.12.1899?
Это происходит, если исходное значение было пустой строкой или текстом, который Excel интерпретировал как 0. Чтобы избежать этого, добавьте проверку:
=ЕСЛИ(A1=""; ""; ДАТАЗНАЧ(A1))
Можно ли извлечь дату из PDF или скрина в Excel?
Excel не умеет напрямую извлекать данные из PDF. Сначала преобразуйте PDF в текст с помощью инструментов вроде Adobe Acrobat или онлайн-сервисов, затем импортируйте текст в Excel и применяйте описанные выше методы.
Для скриншотов используйте программы распознавания текста (OCR), например, ABBYY FineReader или Google Drive (загрузите изображение как файл и откройте как текст).
Как извлечь только год, месяц или день из даты?
Используйте функции:
Пример: =ТЕКСТ(A1; "MMMM") вернёт название месяца словами (например, "март").
Как автоматизировать извлечение дат для тысяч строк?
Для больших объёмов данных:
- Используйте Power Query (способ 5) — он оптимизирован для обработки миллионов строк.
- Напишите макрос VBA (способ 6) и запускайте его по кнопке.
- Для регулярных задач создайте шаблон Excel с готовыми формулами и сохраняйте его как
.xltm.
Если данные обновляются ежедневно, настройте автоматическое обновление через Power Query или VBA с таймером.