Почему Excel хранит даты как числа и когда это полезно
Microsoft Excel оперирует датами не как текстовыми строками, а как последовательными числами, где 1 соответствует 1 января 1900 года (в системе Windows) или 1904 года (на Mac). Этот подход позволяет выполнять арифметические операции с датами: вычитать дни, прибавлять месяцы или рассчитывать разницу между событиями. Однако иногда требуется получить чистое числовое значение — например, для интеграции с другими системами, аналитики или создания пользовательских формул.
Типичные сценарии, когда нужно конвертировать дату в число:
- 📊 Анализ временных рядов — преобразование дат в числовой формат для построения графиков или регрессионных моделей.
- 🔄 Импорт/экспорт данных — многие базы данных (SQL, Python Pandas) ожидают даты в формате timestamp или UNIX-time.
- 📅 Расчёт рабочих дней — числовые значения упрощают логику исключения выходных и праздников.
- 🤖 Автоматизация — скрипты на VBA или Power Query часто требуют числовых входных данных.
Важно понимать разницу между отображением даты (то, что вы видите в ячейке) и её внутренним представлением. Даже если в ячейке отображается 15.05.2026, Excel хранит её как число 45415 (для системы 1900). Наша задача — извлечь это число или преобразовать его в другой числовой формат.
Способ 1: Изменение формата ячейки — самый быстрый метод
Если вам нужно просто увидеть внутреннее числовое значение даты, достаточно изменить формат ячейки. Этот метод не меняет сами данные, а только их отображение.
- Выделите ячейку (или диапазон) с датой.
- Нажмите правой кнопкой мыши и выберите
Формат ячеек...(или используйте сочетаниеCtrl+1). - В открывшемся окне перейдите на вкладку
Числои выберите категориюОбщийилиЧисловой. - Нажмите
OK— дата преобразуется в число (например,45415для 15 мая 2026 года).
⚠️ Внимание: Этот метод работает только если ячейка изначально содержит корректную дату, а не текст, имитирующий дату (например, строку "15.05.2026"). В последнем случае Excel не распознает её как дату, и изменение формата не поможет.
☑️ Проверка перед изменением формата
Способ 2: Функция ДАТАЗНАЧ() — для текстового представления дат
Когда дата хранится как текст (например, после импорта из CSV или базы данных), функция ДАТАЗНАЧ() (или DATEVALUE() в английской версии) преобразует её в числовой формат. Синтаксис:
=ДАТАЗНАЧ("15.05.2026")
Особенности работы функции:
- 🔍 Распознаёт большинство текстовых форматов дат, включая
"15/05/2026","15-05-2026","15 мая 2026". - ❌ Не работает с датами, содержащими время (например,
"15.05.2026 14:30"). Для них используйтеДАТАЗНАЧ+ВРЕМЯЗНАЧ. - 🌍 Зависит от региональных настроек Excel — если формат текста не совпадает с настройками системы, вернёт ошибку
#ЗНАЧ!.
Пример использования с динамической ссылкой:
=ДАТАЗНАЧ(A1)
где A1 — ячейка с текстовой датой.
Способ 3: Формулы для извлечения компонентов даты
Иногда требуется не само внутреннее число Excel, а отдельные компоненты даты — день, месяц или год — в числовом виде. Для этого используйте:
| Компонент | Функция | Пример результата | Примечание |
|---|---|---|---|
| День | ДЕНЬ() | 15 для 15.05.2026 | Возвращает число от 1 до 31 |
| Месяц | МЕСЯЦ() | 5 для мая | Число от 1 (январь) до 12 (декабрь) |
| Год | ГОД() | 2026 | Полный год (4 цифры) |
| День недели | ДЕНЬНЕД() | 4 (среда, если 1=воскресенье) | Зависит от настроек системы |
| Номер недели | НОМНЕДЕЛИ() | 20 для мая 2026 | Тип возвращаемого значения настраивается |
Пример комбинированной формулы для получения даты в формате ГГГГММДД:
=ГОД(A1)&ТЕКСТ(МЕСЯЦ(A1);"00")&ТЕКСТ(ДЕНЬ(A1);"00")
Эта формула вернёт 20260515 для даты 15.05.2026, что удобно для сортировки или использования в качестве уникального идентификатора.
Как получить UNIX-time в Excel?
UNIX-time — это количество секунд с 1 января 1970 года. Формула для преобразования даты из ячейки A1:
=(A1-ДАТАЗНАЧ("1/1/1970"))*86400
Обратите внимание: Excel для Windows использует систему дат с 1900 года, поэтому может возникнуть расхождение в 2 дня для дат до 1970 года.
Способ 4: Power Query — для массовой обработки данных
Если вам нужно преобразовать сотни или тысячи дат, ручные методы неэффективны. В этом случае поможет инструмент Power Query (доступен в Excel 2016 и новее):
- Выделите исходные данные и перейдите на вкладку
Данные→Из таблицы/диапазона. - В открывшемся редакторе Power Query выделите столбец с датами.
- На вкладке
ПреобразованиевыберитеТип данных: Дата, затемТип данных: Число. - Нажмите
Закрыть и загрузить— данные преобразуются в числовой формат.
Power Query сохраняет шаги преобразования, поэтому при обновлении исходных данных числовые значения будут пересчитываться автоматически.
⚠️ Внимание: При импорте данных из внешних источников (CSV, SQL) Power Query может автоматически распознавать столбцы как даты. Проверяйте формат на этапе загрузки, чтобы избежать неявных преобразований.
Способ 5: VBA-макрос для автоматизации
Для пользователей, работающих с VBA, доступен гибкий способ преобразования дат в числа с помощью макроса. Пример кода для преобразования выделенного диапазона:
Sub ConvertDatesToNumbers()
Dim cell As Range
For Each cell In Selection
If IsDate(cell.Value) Then
cell.NumberFormat = "General"
cell.Value = cell.Value
End If
Next cell
End Sub
Как использовать:
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Выделите диапазон с датами и запустите макрос (
F5).
Преимущества метода:
- ⚡ Быстродействие — обрабатывает тысячи ячеек за секунды.
- 🔧 Гибкость — можно модифицировать код для специфических форматов (например, UNIX-time).
- 🔄 Повторяемость — макрос можно назначить на кнопку или горячую клавишу.
Распространённые ошибки и как их избежать
При работе с датами в Excel пользователи часто сталкиваются с типичными проблемами:
- Текст вместо даты: Excel не распознаёт строку
"15.05.2026"как дату, если ячейка отформатирована как текст. Решение: используйтеДАТАЗНАЧ()или функциюЗНАЧЕН()для принудительного преобразования. - Региональные настройки: Формат
"05/15/2026"в американских настройках интерпретируется как 15 мая, а в европейских — как 5 ноября. Проверяйте настройки вФайл → Параметры → Язык. - Отрицательные числа: Даты до 1900 года (или 1904 на Mac) могут давать отрицательные значения. Для таких случаев используйте функцию
ДАТА()с явным указанием года, месяца и дня. - Потеря точности: При копировании числовых значений дат в другие программы (например, в Python) может теряться дробная часть (время). Используйте формат
Общийс достаточным количеством десятичных знаков.
⚠️ Внимание: Если вы работаете с финансовыми данными, где даты используются для расчёта процентов или амортизации, убедитесь, что числовые значения соответствуют календарным дням, а не рабочим. Например, функция РАЗНДАТ() учитывает только календарные дни, а ЧИСТРАБДНИ() — рабочие.
FAQ: Ответы на частые вопросы
Можно ли преобразовать дату в число без потери времени (часов и минут)?
Да, для этого используйте комбинацию функций ДАТАЗНАЧ() и ВРЕМЯЗНАЧ():
=ДАТАЗНАЧ(A1)+ВРЕМЯЗНАЧ(A1)
где A1 содержит дату и время в одном формате (например, "15.05.2026 14:30"). Результат будет числом с дробной частью, где целая часть — дата, а дробная — время.
Почему после преобразования дата отображается как ######?
Это означает, что ширина столбца недостаточна для отображения числа. Расширьте столбец или измените формат ячейки на Общий. Также проверьте, не является ли значение отрицательным (даты до 1900 года в системе 1900).
Как преобразовать число обратно в дату?
Просто измените формат ячейки на Дата или используйте функцию ТЕКСТ():
=ТЕКСТ(A1; "дд.мм.гггг")
где A1 содержит числовое значение даты.
В чём разница между системами дат 1900 и 1904?
Excel для Windows по умолчанию использует систему 1900, где 1 = 1 января 1900 года. На Mac по умолчанию система 1904, где 0 = 1 января 1904 года. Это приводит к разнице в 1462 дня между платформами. Чтобы проверить текущую систему, используйте формулу:
=ДАТА(1900;1;1)
Если результат 1 — система 1900, если -1461 — 1904.
Можно ли преобразовать дату в UNIX-time без VBA?
Да, используйте формулу:
=(A1-ДАТАЗНАЧ("1/1/1970"))*86400
где A1 — ячейка с датой. Для точности добавьте корректировку на временную зону (в секундах). Например, для Москвы (UTC+3):
=((A1-ДАТАЗНАЧ("1/1/1970"))*86400)+10800