Вы открыли файл Excel, а вместо привычных дат в ячейках — странные числа или текстовые строки вроде 44197 вместо 01.01.2021? Или после импорта из 1С все даты превратились в левые символы? Это классическая проблема, с которой сталкивается каждый пятый пользователь. Причины кроются в неверном формате ячеек, ошибках при копировании данных или особенностях экспорта из внешних систем.
Чаще всего Excel воспринимает даты как текст при импорте из CSV, XML или баз данных, где формат хранения отличается от внутренней логики программы. Но даже при ручном вводе можно получить текст вместо даты — например, если ввести 31.02.2023 (несуществующая дата) или использовать нестандартный разделитель. В этой статье разберём все сценарии, почему так происходит, и дадим пошаговые инструкции по исправлению — от простого изменения формата до сложных случаев с макросами.
Особенно актуальна проблема для бухгалтеров, аналитиков и логистов, которые работают с большими массивами данных. Ошибка формата может сломать формулы ДАТАМЕС(), РАЗНДАТ() или сортировку по датам — а это критично для отчётности. Но хорошая новость: в 90% случаев проблема решается за 2-3 клика, если знать, куда смотреть.
Почему Excel воспринимает дату как текст: 5 основных причин
Первое, что нужно понять: Excel хранит даты не как текст, а как числа, где 1 соответствует 01.01.1900 (в системе Windows) или 01.01.1904 (на Mac). Все операции с датами — это арифметические действия над этими числами. Когда программа видит текст вместо числа, она не может применить к нему датные функции.
Вот ключевые причины, почему даты превращаются в текст:
- 📥 Импорт из внешних источников: CSV, JSON, базы данных (MySQL, 1С) часто передают даты в текстовом формате, особенно если разделитель нестандартный (точка вместо косой черты).
- 🖥️ Региональные настройки: Если в системе установлен формат даты
ММ/ДД/ГГГГ, а вы вводитеДД.ММ.ГГГГ, Excel не распознаёт значение как дату. - 📋 Копирование из веб или других программ: При вставке через
Ctrl+Vформат может сбиваться, особенно если источник — веб-страница или PDF. - 🔢 Некорректный ввод: Даты вроде
31.02.2023или2023-13-01автоматически становятся текстом — Excel не может их интерпретировать. - 📊 Ошибки при связывании данных: Если даты подтягиваются через
Power QueryилиВПР, а источник передаёт их как строки, формат не конвертируется.
Самый простой способ проверить, текст у вас или дата — посмотреть на выравнивание в ячейке. Даты по умолчанию выравниваются по правому краю, а текст — по левому. Также можно кликнуть на ячейку: если в строке формул вы видите '31.12.2023 (с апострофом), это точно текст.
Как быстро преобразовать текст в дату: 3 способа без формул
Если даты уже в таблице, но отображаются как текст, исправить это можно за несколько секунд. Вот три самых быстрых метода:
Способ 1: Изменение формата ячеек
- Выделите проблемные ячейки.
- Нажмите
Ctrl+1(или правая кнопка →Формат ячеек). - Вкладка
Число→ выберитеДатаи нужный формат (например,14.03.2001). - Нажмите
ОК.
Если после этого в ячейках остались левые числа (например, 44197), значит, текст не был распознан как дата. Переходите к следующему способу.
Способ 2: Текст по столбцам
Этот метод работает, если даты в текстовом формате, но имеют корректную структуру (например, 2023-12-31).
- Выделите столбец с датами.
- Перейдите в
Данные → Текст по столбцам. - Выберите
С разделителями→Далее. - Снимите все галочки с разделителей (запятая, табуляция и т.д.) →
Далее. - На шаге "Формат данных столбца" выберите
Датаи укажите исходный формат (например,ГМДдля2023-12-31). - Нажмите
Готово.
Способ 3: Двойной клик по маркеру заполнения
Иногда достаточно "разбудить" Excel, чтобы он пересчитал форматы:
- В пустой ячейке рядом введите
1. - Выделите эту ячейку и ячейку с текстовой датой.
- Потяните за маркер заполнения (маленький квадратик в правом нижнем углу) вниз на 2-3 строки.
- Удалите вспомогательный столбец — даты должны обновиться.
Убедитесь, что в тексте нет лишних символов (кавычки, апострофы)
Проверьте региональные настройки (Файл → Параметры → Язык)
Сохраните копию файла перед массовыми изменениями
Попробуйте преобразовать 1-2 ячейки вручную для теста-->
Формулы для преобразования текста в дату: когда стандартные методы не работают
Если даты stored как текст в нестандартном формате (например, 31 дек 2023 или 2023/12/31 14:30), придётся использовать формулы. Вот самые универсальные варианты:
1. Функция ДАТАЗНАЧ() (DATEVALUE)
Преобразует текстовый формат даты в числовой. Работает только с датами без времени!
=ДАТАЗНАЧ(A1)
Пример: если в A1 написано "31.12.2023", формула вернёт 45266 (что соответствует этой дате).
2. Комбинация ЛЕВСИМВ() + ПСТР() + ДАТА()
Если дата в формате ДД-МММ-ГГГГ (например, 31-дек-2023), используйте:
=ДАТА(ПСТР(A1;8;4); ПОИСКПОЗ(ЛЕВСИМВ(ПСТР(A1;4;3));{"янв";"фев";"мар";"апр";"май";"июн";"июл";"авг";"сен";"окт";"ноя";"дек";};0); ДАТАЗНАЧ("1-"&ЛЕВСИМВ(ПСТР(A1;4;3))&"-2023")); ЛЕВСИМВ(A1;2))
Эта формула разбирает строку на день, месяц и год, затем собирает их в корректную дату.
3. ЗАМЕНИТЬ() + ДАТАЗНАЧ() для нестандартных разделителей
Если дата в формате ДД/ММ/ГГГГ, но Excel её не распознаёт:
=ДАТАЗНАЧ(ЗАМЕНИТЬ(ЗАМЕНИТЬ(A1;"/";".");" ";""))
4. Для дат с временем: ДАТАЗНАЧ() + ВРЕМЗНАЧ()
=ДАТАЗНАЧ(ЛЕВСИМВ(A1;10)) + ВРЕМЗНАЧ(ПСТР(A1;12;8))
1) Нет ли в тексте лишних пробелов (используйте =ПЕЧСИМВ(A1) для очистки)
2) Соответствует ли разделитель в тексте региональным настройкам Excel
3) Не содержит ли текст недопустимые символы (например, 31.12.2023г.)-->
Ошибки при импорте данных: как избежать текстового формата
Чаще всего проблемы с датами возникают при импорте из внешних систем. Вот типичные сценарии и их решения:
| Источник данных | Типичная проблема | Решение |
|---|---|---|
| CSV/TXT | Даты в формате YYYY-MM-DD становятся текстом |
Используйте Текст по столбцам с указанием формата ГМД |
| 1С, SQL | Даты передаются как строки с миллисекундами (2023-12-31T00:00:00) |
Обрежьте лишние символы: =ЛЕВСИМВ(A1;10), затем ДАТАЗНАЧ() |
| Google Sheets | При копировании формат сбивается на текст | Экспортируйте в XLSX вместо CSV, или используйте =ИМПОРТДИАПАЗОН() |
| PDF/Word | Даты копируются с неразрывными пробелами | Очистите текст: =ПЕЧСИМВ(ЗАМЕНИТЬ(A1;СИМВОЛ(160);" ")) |
| JSON/XML | Даты в формате timestamp (1672444800) |
Преобразуйте через: =ДАТА(1970;1;1)+A1/86400 |
Особое внимание уделите импорту из 1С: часто даты передаются в формате ДД.ММ.ГГГГ 0:00:00. Чтобы очистить время, используйте:
=ЦЕЛОЕ(A1)
Критичный нюанс: при импорте через Power Query даты могут конвертироваться в локальный формат. Всегда проверяйте столбец на этапе загрузки и при необходимости меняйте тип данных на "Дата" вручную.
Юлианская дата — это количество дней с 1 января 4713 года до н.э. Чтобы преобразовать её в обычную дату, используйте формулу: Где Что делать, если даты в формате Юлианской даты (например, 2459945)
=ДАТА(1900;1;1)+A1-24150212415021 — разница между 1.01.1900 и началом юлианского периода.
Макросы для массового преобразования: когда ручные методы неэффективны
Если у вас тысячи строк с текстовыми датами, ручное исправление займёт часы. В таких случаях поможет VBA-макрос. Вот готовый код для преобразования всего выделенного диапазона:
Sub ConvertTextToDate()
Dim rng As Range
Dim cell As Range
Set rng = Selection
For Each cell In rng
If IsDate(cell.Value) Then
cell.Value = CDate(cell.Value)
cell.NumberFormat = "dd.mm.yyyy"
End If
Next cell
End Sub
Как использовать:
- Выделите диапазон с текстовymi датами.
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - Вставьте код выше в новый модуль (
Insert → Module). - Закройте редактор и запустите макрос через
Alt+F8.
Для дат в нестандартном формате (например, 31дек2023) используйте модифицированный код:
Sub ConvertCustomTextToDate()
Dim rng As Range
Dim cell As Range
Set rng = Selection
For Each cell In rng
Dim original As String
original = cell.Value
' Удаляем все нецифровые символы кроме "дек", "янв" и т.д.
original = Replace(original, "янв", "01")
original = Replace(original, "фев", "02")
' ... добавьте остальные месяцы
original = Replace(original, "дек", "12")
' Преобразуем в дату
If IsDate(original) Then
cell.Value = CDate(original)
cell.NumberFormat = "dd.mm.yyyy"
End If
Next cell
End Sub
⚠️
Внимание: Перед запуском макроса сохраните файл в формате.xlsm(с поддержкой макросов) и убедитесь, что в настройках безопасности разрешено выполнение скриптов (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Настройка макросов → Включить все макросы).
Как предотвратить преобразование дат в текст при экспорте
Чтобы не бороться с последствиями, лучше сразу настроить правильный экспорт. Вот ключевые правила:
- 📤 При экспорте в CSV: Сохраняйте файл с расширением
.csv, но предварительно установите для столбца с датами форматdd.mm.yyyy. ИспользуйтеФайл → Сохранить как → CSV (разделители — запятые). - 🔄 При копировании в другие программы: Используйте
Специальная вставка → Значения, а не стандартноеCtrl+V. Это сохранит числовой формат дат. - 📊 При связывании с Power BI или Tableau: В источниках данных явно указывайте тип столбца как "Дата", а не "Текст".
- 📥 При импорте в 1С: Используйте формат XLSX вместо CSV, или настройте правила конвертации в обработке загрузки.
Если вы часто обмениваетесь данными с коллегами, договоритесь о едином формате дат. Например, ГГГГ-ММ-ДД (ISO 8601) универсально распознаётся большинством систем.
Частые ошибки и как их избежать
Даже опытные пользователи иногда допускают ошибки при работе с датами. Вот топ-5 ловушек и как их обойти:
1. Несоответствие региональных настроек
Если в системе установлен американский формат ММ/ДД/ГГГГ, а вы вводите 01.12.2023, Excel воспримет это как 1 декабря (если день ≤12) или выдаст ошибку. Решение:
- Проверьте настройки:
Файл → Параметры → Дополнительно → Разделитель десятичных и разделитель тысяч. - Используйте
Текст по столбцамс явным указанием формата.
2. Лишние символы в тексте
Даты вроде 31.12.2023 г. или [31.12.2023] не преобразуются автоматически. Очищайте данные:
=ДАТАЗНАЧ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;" г.";"");"[";"");"]";""))
3. Ошибки в формулах с датами
Если вы видите #ЧИСЛО! в формулах вроде РАЗНДАТ(), проверьте:
- Что оба аргумента — реальные даты (а не текст).
- Что первая дата не позже второй (в
РАЗНДАТпорядок важен).
4. Проблемы с временными зонами
При импорте из баз данных даты могут сдвигаться на несколько часов. Используйте:
=A1 - (B1/24)
где B1 — количество часов разницы.
5. Потеря дат при конвертации в CSV
Некоторые программы (например, Notepad++) при сохранении CSV могут искажать кодировку дат. Всегда открывайте CSV через Excel или специализированные редакторы вроде LibreOffice Calc.
⚠️ Это означает, что столбец слишком узкий для отображения даты. Растяните его вручную или используйте автоподбор ширины ( Используйте комбинацию функций для извлечения дня, месяца и года:
Для упрощения можно создать таблицу соответствия месяцев и использовать Да, с помощью макроса Dim ws As Worksheet Dim rng As Range For Each ws In ThisWorkbook.Worksheets Set rng = ws.UsedRange Call ConvertTextToDate(rng) Next ws End Sub Sub ConvertTextToDate(rng As Range) Dim cell As Range For Each cell In rng If IsDate(cell.Value) And cell.NumberFormat = "@" Then cell.Value = CDate(cell.Value) cell.NumberFormat = "dd.mm.yyyy" End If Next cell End SubВнимание: Если вы работаете с историческими датами до 1900 года, помните, что Excel для Windows не поддерживает даты раньше
01.01.1900 (в маке минимум — 01.01.1904). Для таких случаев используйте текстовый формат или специализированные надстройки.FAQ: Ответы на частые вопросы
Почему после преобразования даты отображаются как ########?
Формат → Автоподбор ширины столбца). Также проверьте, что в ячейке действительно дата, а не ошибка (например, #ЗНАЧ! от формулы).Как преобразовать текст в дату, если месяц написан словами (например, "31 декабря 2023")?
=ДАТА(ПРАВСИМВ(A1;4); ПОИСКПОЗ(ПСТР(A1;НАЙТИ(" ";A1)+1;3);{"января";"февраля";"марта";"апреля";"мая";"июня";"июля";"августа";"сентября";"октября";"ноября";"декабря"};0); ДАТАЗНАЧ("1-"&ПСТР(A1;НАЙТИ(" ";A1)+1;3)&"-2023")); ЛЕВСИМВ(A1;2))ВПР.Можно ли автоматически преобразовывать даты при открытии файла?
Workbook_Open. Добавьте этот код в модуль ThisWorkbook:
Private Sub Workbook_Open()
Теперь при каждом открытии файла все тексты, которые можно преобразовать в даты, будут конвертироваться автоматически.
Почему функция ДАТАЗНАЧ не работает с моей датой?
Вероятные причины:
- В тексте есть лишние символы (пробелы, кавычки, скобки).
- Формат даты не соответствует региональным настройкам (например,
ММ-ДД-ГГГГвместоДД-ММ-ГГГГ). - Даты до 1900 года (в Windows Excel их не поддерживает).
- Текст содержит время (например,
31.12.2023 14:30— используйтеДАТАЗНАЧ(ЛЕВСИМВ(A1;10))).
Проверьте текст с помощью =ТИП(A1) — если результат 2, это текст.
Как экспортировать даты в Google Sheets без потери формата?
При экспорте в Google Sheets:
- Сохраните файл в формате
.xlsx. - Загрузите его в Google Диск и откройте через Google Sheets.
- Если даты стали текстом, используйте формулу:
=ARRAYFORMULA(IFERROR(DATEVALUE(A:A); A:A))
Для обратного экспорта из Google Sheets в Excel используйте Файл → Экспорт → Microsoft Excel (.xlsx).