Дата в эксель не читается как дата
Типичная проблема. Выгрузили отчет из учетной системы в виде массива. Пытаемся отфильтровать строки по столбцу с датами, а фильтр не хочет воспринимать даты — он фильтрует их как текст.
Наблюдаем мы такую картину:

Никакие наши манипуляции не приводят к нужному результату. Решение есть в надстройке ЁXCEL.
Выделяем столбец с датами и переходим во вкладку «ЁXCEL» главного меню, нажимаем кнопку «Ячейки», в выпавшем списке выбираем команду «Преобразовать текст в дату»:

Проверяем фильтр — все как нужно:
Исправление чисел, превратившихся в даты

При импорте в Excel данных из внешних программ, иногда возникает весьма неприятная проблема — дробные числа превращаются в даты:
Так обычно происходит, если региональные настройки внешней программы не совпадают с региональными настройками Windows и Excel. Например, вы загружаете данные с американского сайта или европейской учётной системы (где между целой и дробной частью — точка), а в Excel у вас российские настройки (где между целой и дробной частью — запятая, а точка используется как разделитель в дате).
При импорте Excel, как положено, пытается распознать тип входных данных и следует простой логике — если что-то содержит точку (т.е. российский разделитель дат) и похоже на дату — оно будет конвертировано в дату. Всё, что на дату не похоже — останется текстом. Давайте рассмотрим все возможные сценарии на примере испорченных данных на картинке выше:
- В ячейке A1 исходное число 153.4182 осталось текстом, т.к. на дату совсем не похоже (не бывает 153-го месяца)
- В ячейке A2 число 5.1067 тоже осталось текстом, т.к. в Excel не может быть даты мая 1067 года — самая ранняя дата, с которой может работать Excel — 1 января 1900 г.
- А вот в ячейке А3 изначально было число 5.1987, которое на дату как раз очень похоже, поэтому Excel превратил его в 1 мая 1987, услужливо добавив единичку в качестве дня:


Вот такие варианты. И если текстовые числа ещё можно вылечить банальной заменой точки на запятую, то с числами превратившимися в даты такой номер уже не пройдет. А попытка поменять их формат на числовой выведет нам уже не исходные значения, а внутренние коды дат Excel — количество дней от 01.01.1900 до текущей даты:

Лечится вся эта история тремя принципиально разными способами.
Способ 1. Заранее в настройках
Если данные ещё не загружены, то можно заранее установить точку в качестве разделителя целой и дробной части через Файл — Параметры — Дополнительно (File — Options — Advanced) :
Снимаем флажок Использовать системные разделители (Use system separators) и вводим точку в поле Разделитель целой и дробной части (Decimal separator) .
После этого можно смело импортировать данные — проблем не будет.
Способ 2. Формулой
Если данные уже загружены, то для получения исходных чисел из поврежденной дата-тексто-числовой каши можно использовать простую формулу:
=—ЕСЛИ( ЯЧЕЙКА(«формат»;A1)=»G» ; ПОДСТАВИТЬ(A1;».»;»,») ; ТЕКСТ(A1;»М,ГГГГ») )
В английской версии это будет:
=—IF (CELL («format «;A1)=»G»; SUBSTITUTE (A1;».»;»,»); TEXT (A1;»M ,YYYY «))
Логика здесь простая:
- Функция ЯЧЕЙКА (CELL) определяет числовой формат исходной ячейки и выдаёт в качестве результата «G» для текста/чисел или «D3» для дат.
- Если в исходной ячейке текст, то выполняем замену точки на запятую с помощью функции ПОДСТАВИТЬ (SUBSTITUTE) .
- Если в исходной ячейке дата, то выводим её в формате «номер месяца — запятая — номер года» с помощью функции ТЕКСТ (TEXT) .
- Чтобы преобразовать получившееся текстовое значение в полноценное число — выполняем бессмысленную математическую операцию — добавляем два знака минус перед формулой, имитируя двойное умножение на -1.
Способ 3. Макросом
Если подобную процедуру лечения испорченных чисел приходится выполнять часто, то имеет смысл автоматизировать процесс макросом. Для этого жмём сочетание клавиш Alt + F11 или кнопку Visual Basic на вкладке Разработчик (Developer) , вставляем в нашу книгу новый пустой модуль через меню Insert — Module и копируем туда такой код:
Sub Fix_Numbers_From_Dates() Dim num As Double, cell As Range For Each cell In Selection If Not IsEmpty(cell) Then If cell.NumberFormat = "General" Then num = CDbl(Replace(cell, ".", ",")) Else num = CDbl(Format(cell, "m,yyyy")) End If cell.Clear cell.Value = num End If Next cell End Sub
Останется выделить проблемные ячейки и запустить созданный макрос сочетанием клавиш Alt + F8 или через команду Макросы на вкладке Разработчик (Developer — Macros) . Все испорченные числа будут немедленно исправлены.
Ссылки по теме
- Как Excel на самом деле работает с датами и временем
- Замена текста функцией ПОДСТАВИТЬ
- Функция ВПР и числа-как-текст
Преобразование дат из текстового формата в формат даты
В некоторых случаях даты могут быть отформатированы и храниться в ячейках в виде текста. Например, вы могли ввести дату в ячейку, которая была отформатирована как текст, или данные могли быть импортированы или вставлены из внешнего источника данных в виде текста.
Даты, отформатированные как текст, выравниваются по левому краю в ячейке (а не по правому краю). Если включена проверка ошибок, текстовые даты с двумя цифрами лет также могут быть помечены индикатором ошибки: .
Поскольку функция проверки ошибок в Excel распознает даты в текстовом формате с двузначным номером года, можно воспользоваться средством автозамены и преобразовать их в даты в формате даты. Функцию DATEVALUE можно использовать для преобразования большинства других типов текстовых дат в даты.
Преобразование текстовых дат с двумя цифрами лет с помощью проверки ошибок
При импорте данных в Excel из другого источника или при вводе дат с двумя цифрами лет в ячейки, которые ранее были отформатированы как текст, в левом верхнем углу ячейки может появиться небольшой зеленый треугольник. Этот индикатор ошибки указывает на то, что дата хранится в текстовом формате, как показано в данном примере.

Индикатор ошибки можно использовать для преобразования дат из текста в формат даты.
Примечания: Сначала убедитесь, что проверка ошибок включена в Excel. Для этого:
- Щелкните Файл >Параметры >Формулы. В Excel 2007 нажмите кнопку Microsoft Office , а Excel параметры >формул.
- В разделе «Проверка ошибок» установите флажок «Включить фоновую проверку ошибок». Все найденные ошибки помечаются треугольником в левом верхнем углу ячейки.
- В разделе «Правила проверки ошибок» выберите ячейки, содержащие годы, представленные в виде двух цифр.
Выполните следующую процедуру, чтобы преобразовать форматированную текстом дату в обычную дату:
-
Выделите ячейку или диапазон смежных ячеек с индикатором ошибки в верхнем левом углу. Дополнительные сведения см. в разделе «Выбор ячеек, диапазонов, строк или столбцов на листе».
Совет: Чтобы отменить выделение ячеек, щелкните любую ячейку на листе.


Текстовые даты с двумя цифрами лет преобразуют в стандартные даты с четырехзначными годами.

После преобразования ячеек с текстовыми значениями можно изменить внешний вид дат путем применения формата даты.
Если на листе есть даты, которые, возможно, были импортированы или вставлены, в итоге выглядят как ряд чисел, как показано на рисунке ниже, вы, вероятно, захотите переформатировать их, чтобы они отображались как короткие или длинные даты. Формат даты также будет полезен, если вы хотите отфильтровать, отсортировать или использовать его в вычислениях дат.

- Выделите ячейку, диапазон ячеек или столбец, которые нужно переформатировать.
- Щелкните «Формат номера» и выберите нужный формат даты.
Формат короткой даты выглядит следующим образом:

Длинная дата содержит дополнительные сведения, как на этом рисунке:

Преобразование дат в текстовом формате с помощью функции ДАТАЗНАЧ
Чтобы преобразовать текстовую дату в ячейке в серийный номер, используйте функцию DATEVALUE. Затем скопируйте формулу, выделите ячейки, содержащие текстовые даты, и используйте специальную вставку, чтобы применить к ним формат даты.
- Выделите пустую ячейку и убедитесь, что ее число имеет формат «Общие».
- В пустой ячейке сделайте следующее.
- Введите =DATEVALUE(
- Щелкните ячейку, содержащую дату в текстовом формате, которую следует преобразовать.
- ВВОД )
- Нажмите клавишу ВВОД, и функция DATEVALUE возвращает серийный номер даты, представленной текстовой датой.
Что такое Excel серийный номер? В Excel даты хранятся в виде порядковых номеров, что позволяет использовать их в вычислениях. По умолчанию 1 января 1900, является серийным номером 1, а 1 января 2008 г. — серийным номером 39448, так как это 39 448 дней после 1 января, 1900.To скопируйте формулу преобразования в диапазон смежных ячеек, выделите ячейку, содержащую введенную формулу, а затем перетащите маркер заполнения по диапазону пустых ячеек, которые соответствуют диапазону ячеек, содержащих текстовые даты.
Дополнительные сведения
Вы всегда можете задать вопрос эксперту в Excel Tech Community или получить поддержку в сообществах.
Дата в эксель не читается как дата
Argument ‘Topic id’ is null or empty
Сейчас на форуме
© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ruИспользование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.
ООО «Планета Эксел»
ИНН 7735603520
ОГРН 1147746834949ИП Павлов Николай Владимирович
ИНН 633015842586
ОГРНИП 310633031600071