Вы когда-нибудь сталкивались с ситуацией, когда Excel упрямо воспринимает ваши данные как даты, хотя вам нужны обычные числа? Например, вместо 45678 вы видите 12.01.2026, а все попытки отформатировать ячейку заканчиваются ошибкой #ЗНАЧ!? Эта проблема знакома многим — от бухгалтеров до аналитиков данных. Дело в том, что Excel хранит даты как последовательные числа (начиная с 1 января 1900 года = 1), но отображает их в удобочитаемом формате. Когда требуется именно числовое значение — для расчётов, импорта в другие системы или анализа — стандартные методы часто не срабатывают.
В этой статье мы разберём не только базовые способы преобразования (которые знают все), но и малоизвестные приёмы для сложных случаев: когда даты хранятся как текст, когда нужно сохранить оригинальный формат или когда данные поступают из внешних источников с некорректной кодировкой. Вы узнаете, почему функция ДАТАЗНАЧ() иногда возвращает ошибку, как обойти ограничения Excel при работе с датами до 1900 года, и почему простой копированием через блокнот не всегда достаточно.
Почему Excel автоматически преобразует числа в даты
Корень проблемы кроется в архитектуре Excel. Программа использует систему серийных номеров дат, где:
- 📅
1= 1 января 1900 года (в Windows) или 1 января 1904 года (в Mac по умолчанию) - ⏳ Каждый последующий день увеличивает число на 1 (например,
2= 2 января 1900 года) - ⏰ Дробная часть числа обозначает время (например,
45678.5= полдень 12.01.2026)
Когда вы вводите что-то похожее на дату (например, 12-05 или 01.01.2023), Excel автоматически интерпретирует это как дату и применяет соответствующий формат. Даже если вы введёте 45678 и затем измените формат ячейки на Дата, программа покажет 12.01.2026. Это поведение заложено на уровне ядра и не зависит от версии Excel (2010, 2016, 2019 или 365).
⚠️ Внимание: В Excel для Mac по умолчанию используется система дат с 1904 года. Это означает, что число1соответствует 2 января 1904 года, а не 1900. Чтобы избежать ошибок при обмене файлами между Windows и Mac, проверяйте настройку вФайл → Параметры → Дополнительно → При вычислениях этой книги → Дата 1904.
Интересный факт: Microsoft специально оставляет "баг" с 29.02.1900 (который не существовал в реальности), чтобы сохранить совместимость с Lotus 1-2-3 — популярной программой 1980-х годов. Это означает, что серийный номер 60 в Excel соответствует несуществующей дате!
Способ 1: Изменение формата ячейки (самый простой метод)
Если ваша "дата" на самом деле уже является числом в серийном формате Excel (например, 45678 отображается как 12.01.2026), достаточно сменить формат:
- Выделите ячейки с датами.
- Нажмите правой кнопкой мыши и выберите
Формат ячеек(или используйте сочетаниеCtrl+1). - Вкладка
Число→ категорияЧисловойилиОбщий. - Укажите нужное количество десятичных знаков (обычно 0).
Этот метод работает, потому что вы не изменяете само значение ячейки, а только способ его отображения. Однако он бесполезен, если:
- 🔢 Дата хранится как текст (например, результат импорта из CSV)
- 📊 Вам нужно не просто отобразить число, а использовать его в формулах
- 🔄 Данные обновляются автоматически (например, через Power Query)
Способ 2: Функция ДАТАЗНАЧ() для текстового формата
Когда даты импортируются как текст (например, из CSV или базы данных), они выглядят как даты, но Excel не распознаёт их как таковые. В этом случае поможет функция ДАТАЗНАЧ():
=ДАТАЗНАЧ(A1)
Эта функция преобразует текстовую строку в серийный номер даты. Например, если в ячейке A1 находится текст "15.03.2026", формула вернёт число 45350 (серийный номер для этой даты).
| Исходный текст в A1 | Формула | Результат (число) | Результат (дата) |
|---|---|---|---|
| "12/01/2026" | =ДАТАЗНАЧ(A1) | 45678 | 12.01.2026 |
| "31-дек-2023" | =ДАТАЗНАЧ(A1) | 45266 | 31.12.2023 |
| "01.01.1900" | =ДАТАЗНАЧ(A1) | 1 | 01.01.1900 |
| "29.02.2020" | =ДАТАЗНАЧ(A1) | 43890 | 29.02.2020 |
| "Не дата" | =ДАТАЗНАЧ(A1) | #ЗНАЧ! | Ошибка |
Обратите внимание на последний пример: если текст не может быть интерпретирован как дата, функция вернёт ошибку. Чтобы избежать этого, используйте комбинацию с ЕСЛИОШИБКА():
=ЕСЛИОШИБКА(ДАТАЗНАЧ(A1); "Некорректная дата")
Способ 3: Разбор даты по компонентам (ДАТА(), ДЕНЬ(), МЕСЯЦ(), ГОД())
Если ваши даты имеют нестандартный формат (например, "15 марта 2026 года" или "2026/03/15"), функция ДАТАЗНАЧ() может не сработать. В таких случаях разбирайте дату на компоненты:
=ДАТА(ГОД(A1); МЕСЯЦ(A1); ДЕНЬ(A1))
Для нестандартных форматов используйте текстовые функции:
- 📌
ЛЕВСИМВ(),ПСТР(),ПРАВСИМВ()— для извлечения частей строки - 🔍
ПОИСК()илиНАЙТИ()— для поиска разделителей - 📊
ПОДСТАВИТЬ()— для замены символов
Пример для даты в формате "15.03.2026":
=ДАТА(ПРАВСИМВ(A1;4); ПСТР(A1;4;2); ЛЕВСИМВ(A1;2))
⚠️ Внимание: При работе с датами в форматеММ/ДД/ГГГГ(американский стандарт) Excel может путать день и месяц. Например,"03/04/2026"будет интерпретировано как 3 апреля, а не 4 марта. Чтобы избежать ошибок, явно указывайте порядок компонентов в функцииДАТА().
Убедиться, что все даты имеют одинаковый формат|Проверить наличие пустых ячеек|Удалить лишние символы (кавычки, пробелы)|Сохранить резервную копию данных|Проверить региональные настройки Excel-->
Способ 4: Использование Power Query для массового преобразования
Если вам нужно преобразовать тысячи строк с датами, ручные методы неэффективны. В этом случае используйте Power Query (доступен в Excel 2016 и новее):
- Выделите данные и перейдите на вкладку
Данные→Из таблицы/диапазона. - В открывшемся редакторе Power Query выделите столбец с датами.
- На вкладке
ПреобразованиевыберитеТип данных → Дата(если текст), затем сноваТип данных → Число. - Нажмите
Закрыть и загрузить.
Преимущества Power Query:
- 🔄 Обрабатывает миллионы строк без замедления
- 📊 Сохраняет шаги преобразования для повторного использования
- 🔧 Позволяет исправлять ошибки на лету (например, заменять
"N/A"на пустые значения)
Для дат в нестандартных форматах (например, "15мар2026") в Power Query можно использовать пользовательский столбец с формулой на языке M:
= Date.From(Text.From([YourColumn], "ru-RU"))
Как вернуть даты до 1900 года в Excel?
Excel не поддерживает даты до 1900 года в стандартной системе, но есть обходные пути:
1. Используйте текстовый формат и работайте с датами как со строками.
2. Создайте собственную систему серийных номеров (например, 1 = 01.01.1800).
3. Используйте надстройки сторонних разработчиков (например, XLDate).
4. Для астрономических расчётов переходите на специализированное ПО вроде Stellarium или Python с библиотекой pandas.
Способ 5: VBA-макрос для автоматизации (продвинутый уровень)
Если вам регулярно приходится преобразовывать даты в числа, напишите простой макрос на VBA:
Sub ConvertDatesToNumbers()
Dim cell As Range
For Each cell In Selection
If IsDate(cell.Value) Then
cell.NumberFormat = "0"
cell.Value = cell.Value
End If
Next cell
End Sub
Как использовать:
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Выделите ячейки с датами и запустите макрос (
F5или черезМакросыв менюВид).
Этот макрос проверяет, является ли значение датой, и если да — меняет формат на числовой. Для обработки текстового формата дат модифицируйте условие:
If IsDate(cell.Text) Then
⚠️ Внимание: Макросы могут быть заблокированы настройками безопасности Excel. Перед использованием проверьтеФайл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросови выберитеВключить все макросы(только для доверенных файлов!).
Распространённые ошибки и как их избежать
Даже опытные пользователи Excel сталкиваются с проблемами при преобразовании дат. Вот типичные ошибки и их решения:
| Ошибка | Причина | Решение |
|---|---|---|
| #ЗНАЧ! в функции ДАТАЗНАЧ() | Текст не распознаётся как дата | Используйте разбор по компонентам или исправьте формат исходных данных |
| Неправильный месяц/день | Excel путает порядок дня и месяца | Явно указывайте компоненты в функции ДАТА() |
| Отрицательные числа | Дата до 1900 года | Работайте с датами как с текстом или используйте надстройки |
| Изменение формата не работает | Дата хранится как текст | Примените ДАТАЗНАЧ() или Power Query |
| Потеря дробной части (времени) | Формат ячейки обрезает дробную часть | Используйте формат Общий или увеличьте десятичные знаки |
Особое внимание уделите региональным настройкам. Если в вашей системе установлен американский формат дат (ММ/ДД/ГГГГ), а вы работаете с российскими данными (ДД.ММ.ГГГГ), Excel будет интерпретировать "03.04.2026" как 3 апреля, а не 4 марта. Чтобы избежать этого:
- 🌍 Проверьте настройки региона в
Панель управления → Часы и регион → Регион(Windows). - 📅 В Excel перейдите в
Файл → Параметры → Дополнительно → Параметры редактирования → Использовать системные разделители. - 🔧 Или явно указывайте формат при импорте данных.
FAQ: Частые вопросы о преобразовании дат в числа
Можно ли преобразовать дату в число без потери времени (дробной части)?
Да, если исходная ячейка содержит и дату, и время (например, 12.01.2026 14:30), функция ДАТАЗНАЧ() или изменение формата сохранят дробную часть. Например, 45678.60417 соответствует 12.01.2026 14:30 (где 0.60417 = 14 часов 30 минут). Чтобы отобразить полное число, используйте формат Общий или увеличьте количество десятичных знаков.
Почему после преобразования в число дата становится на 4 года меньше?
Это происходит из-за различия в системах дат между Windows и Mac. В Excel для Mac по умолчанию используется система с 1904 года (где 1 = 2.01.1904), а в Windows — с 1900 года. Чтобы исправить:
- Проверьте настройку в
Файл → Параметры → Дополнительно → При вычислениях этой книги → Дата 1904. - Если флажок установлен, снимите его и пересчитайте данные (
F9). - Или добавьте/вычтите 1462 дня (разница между системами) вручную.
Как преобразовать дату в число, если она хранится как текст с буквами (например, "15 марта")?
Для таких случаев комбинируйте текстовые и датовые функции. Например, для формата "15 марта 2026":
=ДАТА(
ПРАВСИМВ(A1;4),
ПОИСКПОЗ(ЛЕВСИМВ(ПСТР(A1;4;10);3);{"янв";"фев";"мар";"апр";"мая";"июн";"июл";"авг";"сен";"окт";"ноя";"дек";0}),
ЛЕВСИМВ(A1;2)
)
Или используйте Power Query с пользовательским столбцом на языке M:
= Date.From(Text.From([Column1], "ru-RU"))
Можно ли автоматически преобразовывать даты в числа при импорте данных?
Да, при импорте через Данные → Из текста/CSV:
- В мастере импорта выберите столбец с датами.
- Укажите тип данных
Текст(чтобы избежать автоматического преобразования). - После импорта примените
ДАТАЗНАЧ()или Power Query.
Для регулярного импорта создайте шаблон с Power Query — он будет автоматически преобразовывать данные при каждом обновлении.
Почему функция ДАТАЗНАЧ() возвращает #ЗНАЧ! для корректной даты?
Частые причины:
- 📅 Дата вне поддерживаемого диапазона (до 1900 или после 9999 года).
- 🔢 Лишние пробелы или невидимые символы (например, неразрывный пробел). Используйте
=СЖПРОБЕЛЫ(A1). - 🌍 Несоответствие региональных настроек (например,
"02/03/2026"интерпретируется как 2 марта в России и 3 февраля в США). - 📊 Дата в нестандартном формате (например,
"15мар2026"без разделителей).
Решение: очистите данные функцией =ПЕЧСИМВ(A1) (удаляет непечатаемые символы) или разбирайте дату по компонентам.