Как вытащить дату из ячейки в Excel: от простых формул до VBA

Почему 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)
📊 Какой формат дат чаще всего встречается в ваших данных?
Текст с встроенной датой (например, "Договор от 01.01.2026")
Числовое значение (например, 45341)
Дата в американском формате (MM/DD/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).

☑️ Подготовка данных для ДАТАЗНАЧ

Выполнено: 0 / 4

Способ 2: Извлечение даты из текста с помощью ЛЕВСИМВ, ПСТР и ПРАВСИМВ

Когда дата встроена в текст (например, "Отчёт за март 2026 года, дата формирования 31.03.2026"), функции ДАТАЗНАЧ недостаточно. Здесь пригодятся текстовые функции:

  • 🔍 ПОИСК(искомая_подстрока; текст) — находит позицию символа в строке
  • 📏 ПСТР(текст; начальная_позиция; количество_символов) — вырезает фрагмент
  • ЛЕВСИМВ(текст; количество_символов) — берёт символы слева
  • ПРАВСИМВ(текст; количество_символов) — берёт символы справа

Пример: извлечём дату из текста "Срок оплаты до 15.04.2026":

=ДАТАЗНАЧ(ПСТР(A1; ПОИСК("."; A1)-2; 10))

Разберём формулу:

  1. ПОИСК("."; A1) находит позицию первой точки (в нашем случае это 15-й символ).
  2. ПОИСК("."; A1)-2 отступает на 2 символа влево (чтобы захватить день).
  3. ПСТР(A1; ...; 10) вырезает 10 символов начиная с найденной позиции (получаем "15.04.2026").
  4. ДАТАЗНАЧ преобразует вырезанный текст в дату.
⚠️ Внимание: Этот метод работает только если формат даты в тексте фиксированный (например, всегда 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"), но разделители одинаковые (тире, слэш, точка), можно использовать инструмент "Текст по столбцам":

  1. Выделите столбец с датами.
  2. Перейдите на вкладку ДанныеТекст по столбцам.
  3. Выберите С разделителямиДалее.
  4. Укажите разделитель (например, тире - или слэш /).
  5. На шаге Формат данных столбца выберите для каждого столбца (день, месяц, год) формат Дата (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 — инструмент для преобразования данных, поддерживающий регулярные выражения.

Алгоритм действий:

  1. Выделите исходные данные и перейдите на вкладку ДанныеИз таблицы/диапазона (Power Query откроется в отдельном окне).
  2. Выберите столбец с датами → ПреобразоватьИзвлечьТекст по образцу.
  3. Введите шаблон для даты, например:
    • Для 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

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

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

    Результат: в столбце справа от исходных данных появятся извлечённые даты.

    ⚠️ Внимание: Макрос ищет первую дату в строке. Если в ячейке несколько дат (например, "С 01.01.2026 по 31.12.2026"), он вернёт только 01.01.2026. Для извлечения нескольких дат потребуется модифицировать код.

    Способ 7: Исправление "битых" дат (например, 43101 вместо 01.01.2018)

    Иногда при импорте данных из внешних источников даты преобразуются в странные числа (например, 43101 вместо 01.01.2018). Это происходит потому, что Excel хранит даты как количество дней с 01.01.1900, но при импорте теряется формат.

    Чтобы исправить такие даты:

    1. Убедитесь, что ячейка имеет числовой формат (не текстовый!).
    2. Измените формат ячейки на Дата через контекстное меню (Формат ячеекДата).
    3. Если дата отображается некорректно (например, 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 ошибок и способы их решения:

    1. Ошибка #ЗНАЧ! в функции ДАТАЗНАЧ

      Причина: Ячейка содержит не только дату, но и текст (например, "Дата: 15.03.2026").

      Решение: Предварительно извлеките дату функциями ПСТР, ТЕКСТПОСЛЕ или регулярными выражениями.

    2. Дата отображается как ######

      Причина: Ячейка слишком узкая или дата отрицательная (например, 30.02.2026).

      Решение: Расширьте столбец или проверьте корректность даты.

    3. Неправильный порядок дня и месяца

      Причина: Excel интерпретирует дату в формате MM/DD/YYYY как американскую.

      Решение: Используйте формулу с явным указанием порядка:

      =ДАТА(ПРАВСИМВ(A1;4); ПСТР(A1;4;2); ЛЕВСИМВ(A1;2))

      (для даты в формате DDMMYYYY без разделителей)

    4. Дата превращается в 00.01.1900

      Причина: Исходное значение не является корректной датой (например, текст "Нет данных").

      Решение: Добавьте проверку на ошибки:

      =ЕСЛИОШИБКА(ДАТАЗНАЧ(A1); "")

    5. Макрос не находит даты

      Причина: Регулярное выражение в VBA не учитывает все возможные форматы.

      Решение: Модифицируйте шаблон, например:

      regex.Pattern = "\b\d{1,2}[./-]\d{1,2}[./-]\d{2,4}\b"

      (это позволит находить даты с тире, точками и слэшами).

    6. 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) — вернёт год
      • =МЕСЯЦ(A1) — вернёт месяц (число от 1 до 12)
      • =ДЕНЬ(A1) — вернёт день месяца
      • =ДЕНЬНЕД(A1) — вернёт день недели (1 = воскресенье, 2 = понедельник и т.д.)

    Пример: =ТЕКСТ(A1; "MMMM") вернёт название месяца словами (например, "март").

    Как автоматизировать извлечение дат для тысяч строк?

    Для больших объёмов данных:

    1. Используйте Power Query (способ 5) — он оптимизирован для обработки миллионов строк.
    2. Напишите макрос VBA (способ 6) и запускайте его по кнопке.
    3. Для регулярных задач создайте шаблон Excel с готовыми формулами и сохраняйте его как .xltm.

    Если данные обновляются ежедневно, настройте автоматическое обновление через Power Query или VBA с таймером.