Работа с датами в Microsoft Excel — одна из самых востребованных задач, будь то ведение отчётности, планирование проектов или анализ временных рядов. Однако даже опытные пользователи иногда сталкиваются с вопросами: как вставить текущую дату так, чтобы она не обновлялась при пересчёте таблицы? Как автоматически проставлять сегодняшнее число в новых строках? Или почему Excel воспринимает введённую дату как число, а не как формат даты?
В этой статье мы разберём 5 основных способов работы с датами — от элементарного ручного ввода до динамических формул и макросов. Вы узнаете, как:
- 📅 Вставлять статичную дату, которая не меняется при открытии файла
- 🔄 Использовать функции
TODAY()иNOW()для автоматического обновления - ⚙️ Настраивать формат отображения даты (с временем, без года, в текстовом виде)
- 📊 Применять даты в формулах для расчёта разницы дней или рабочих часов
- 🤖 Автоматизировать простановку дат с помощью VBA-макросов
Особое внимание уделим типичным ошибкам — например, почему после копирования ячейки с датой она отображается как пятизначное число (например, 44927 вместо 01.01.2023), и как это исправить. Все инструкции актуальны для Excel 2010–2023 и Microsoft 365, включая веб-версию.
1. Ручной ввод даты: простой, но не всегда удобный способ
Самый очевидный метод — ввести дату в ячейку вручную. Например, наберите 15.05.2026 или 15 мая 2026, и Excel автоматически распознает её как формат даты. Однако здесь есть нюансы:
Если после ввода дата отображается как число (например, 45456), значит, Excel интерпретировал её как количество дней с 1 января 1900 года (так называемая "система дат 1900"). Чтобы исправить:
- Выделите ячейку с "числом".
- Нажмите
Ctrl+1(или правой кнопкой →Формат ячеек). - Вкладка
Число→ выберитеДатаи укажите нужный формат (например,14.03.2001).
⚠️ Внимание: Если вы скопируете ячейку с датой в формате числа (например, 44927) и вставите её в текстовый редактор, дата отобразится корректно только при условии, что программа поддерживает преобразование Excel-дат. В обычном блокноте вы увидите то же число.
Преимущество ручного ввода — дата остаётся статичной (не обновляется при открытии файла). Недостаток — придётся вводить её заново каждый день, если требуется актуальная дата.
2. Функция TODAY(): автоматическая текущая дата
Функция =TODAY() возвращает сегодняшнюю дату и обновляется каждый раз при пересчёте таблицы или открытии файла. Это удобно для отчётов, где всегда нужна актуальная дата. Синтаксис простой:
=TODAY()
Примеры использования:
- 📌
=TODAY()-30— вернёт дату, которая была 30 дней назад. - 📌
=TODAY()+7— дата через неделю. - 📌
=IF(TODAY()>B2, "Срок истёк", "Актуально")— проверка просроченных задач.
Важно: TODAY() не учитывает время, только дату. Если вам нужно текущее время, используйте =NOW() (об этом ниже).
| Функция | Пример | Результат (на 15.05.2026) |
|---|---|---|
TODAY() |
=TODAY() |
15.05.2026 |
TODAY()+10 |
=TODAY()+10 |
25.05.2026 |
YEAR(TODAY()) |
=YEAR(TODAY()) |
2026 |
TEXT(TODAY(),"dddd") |
=TEXT(TODAY(),"dddd") |
Среда |
⚠️ Внимание: Если файл с функцией TODAY() не открывали несколько дней, дата обновится до текущей только при следующем открытии. Excel не пересчитывает формулы в закрытых книгах!
3. Функция NOW(): дата + время с секундами
В отличие от TODAY(), функция =NOW() возвращает не только дату, но и текущее время (с точностью до секунды). Синтаксис:
=NOW()
Примеры:
- 🕒
=NOW()-1/24— время час назад (в Excel время хранится как доля дня:1/24 = 1 час). - 📅
=INT(NOW())— текущая дата без времени (аналогTODAY()). - 🔄
=IF(NOW()>C2, "Опаздываем!", "Время есть")— проверка дедлайнов.
Критическая особенность: NOW() обновляется при каждом изменении в книге (даже если вы просто нажали на ячейку и нажали Enter). Это может замедлить работу с большими файлами. Если вам нужно фиксировать время одноразово (например, момент создания записи), лучше использовать VBA или сочетание клавиш Ctrl+Shift+;.
Как отключить автоматическое обновление NOW()?
По умолчанию отключить нельзя, но можно:
1. Заменить формулу на значение: выделите ячейку → Копировать → Специальная вставка → Значения.
2. Использовать VBA-макрос для одноразовой вставки времени.
4. Форматирование даты: от "15.05" до "15 мая 2026 г."
Excel позволяет гибко настраивать отображение дат через Формат ячеек (Ctrl+1). Рассмотрим основные варианты:
| Формат | Пример кода | Отображение (для 15.05.2026) |
|---|---|---|
| Дата с месяцем словами | д ммм гггг |
15 мая 2026 |
| Только день и месяц | д.мм |
15.05 |
| День недели + дата | dddd, д ммм |
Среда, 15 мая |
| ISO-формат (международный) | гггг-мм-дд |
2026-05-15 |
| Дата + время | д.мм.гггг ч:мм |
15.05.2026 14:30 |
Чтобы применить пользовательский формат:
- Выделите ячейку с датой.
- Нажмите
Ctrl+1→ вкладкаЧисло→Все форматы. - В поле
Типвведите код формата (например,"Дата: "д ммм гггг г.).
Лайфхак: Если нужно отобразить дату как текст (например, для конкатенации с другими строками), используйте функцию =TEXT():
=TEXT(TODAY(), "д ммм гггг года") → "15 мая 2026 года"
5. Автоматическая простановка даты при добавлении строк
Частая задача — проставлять текущую дату в новой строке таблицы (например, в журнале звонков или списке задач). Решить это можно тремя способами:
Способ 1: Формула с проверкой пустой ячейки
Допустим, данные вводятся в столбец A, а дату нужно проставлять в столбце B. В ячейку B2 введите:
=IF(A2<>"", IF(B2="", TODAY(), B2), "")
Эта формула:
- 🔹 Проверяет, есть ли данные в
A2. - 🔹 Если да и ячейка
B2пустая — вставляетTODAY(). - 🔹 Если в
B2уже есть дата — оставляет её (чтобы не обновлялась).
Способ 2: VBA-макрос для одноразовой вставки
Если формулы не подходят (например, дата не должна обновляться), используйте этот код:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("A:A") ' Столбец, где вводятся данные
If Not Application.Intersect(KeyCells, Target) Is Nothing Then
If Target.Value <> "" And Target.Offset(0, 1).Value = "" Then
Target.Offset(0, 1).Value = Date ' Вставляет текущую дату в соседнюю ячейку
End If
End If
End Sub
Как установить:
- Нажмите
Alt+F11→ откройте редактор VBA. - Дважды кликните на лист, где нужна автоматическая дата.
- Вставьте код выше.
- Сохраните файл как
.xlsm(с поддержкой макросов).
⚠️ Внимание: Макрос сработает только при ручном вводе данных в столбецA. Если вы импортируете данные или вставляете их черезСпециальную вставку, дата не проставится.
Сохранить файл как .xlsm (включить макросы)|Разрешить выполнение макросов в настройках Excel|Проверить, что данные вводятся в указанный столбец|Убедиться, что соседний столбец пуст-->
6. Расчёт разницы между датами: DATEDIF и не только
Excel позволяет вычислять разницу между датами в днях, месяцах или годах. Основные функции:
| Задача | Формула | Пример (для 01.01.2026 и 15.05.2026) |
|---|---|---|
| Разница в днях | =B2-A2 |
135 |
| Разница в месяцах | =DATEDIF(A2,B2,"m") |
4 |
| Разница в годах | =DATEDIF(A2,B2,"y") |
0 |
| Рабочие дни (без выходных) | =NETWORKDAYS(A2,B2) |
95 |
| Дни с учётом праздников | =NETWORKDAYS(A2,B2,СписокПраздников) |
90 |
Функция DATEDIF — самая универсальная, но она скрытая (не отображается в списке функций). Её синтаксис:
=DATEDIF(начальная_дата; конечная_дата; "единица_измерения")
Где единица_измерения может быть:
- 📅
"d"— дни - 📅
"m"— полные месяцы - 📅
"y"— полные годы - 📅
"ym"— месяцы без учёта лет - 📅
"md"— дни без учёта месяцев и лет
Пример: Чтобы узнать, сколько лет, месяцев и дней прошло с 01.01.2020 до сегодня:
=DATEDIF("01.01.2020"; TODAY(); "y") & " лет, " & DATEDIF("01.01.2020"; TODAY(); "ym") & " мес., " & DATEDIF("01.01.2020"; TODAY(); "md") & " дн."
7. Типичные ошибки и как их избежать
Даже простые операции с датами могут приводить к неожиданным результатам. Разберём самые частые проблемы:
Ошибка 1: Дата отображается как число (например, 44927)
Причина: Ячейка имеет общий или числовой формат. Решение:
- 🔧 Измените формат на
Дата(Ctrl+1). - 🔧 Если дата введена как текст (например,
'15.05.2026), используйте=ДАТАЗНАЧ(A1)для преобразования.
Ошибка 2: Формула TODAY()-30 возвращает дату в формате числа
Причина: Результат формулы не отформатирован как дата. Решение:
- 🎨 Примените формат
Датак ячейке с формулой. - 🔄 Или оберните формулу в
TEXT:=TEXT(TODAY()-30, "д.мм.гггг")
Ошибка 3: DATEDIF возвращает #ЧИСЛО!
Причины и решения:
- 🔍 Неверный порядок дат: начальная дата позже конечной. Поменяйте их местами.
- 🔍 Неправильный код единицы измерения: вместо
"m"указано"month". Используйте только"d","m","y"и их комбинации. - 🔍 Ячейки содержат текст: проверьте формат ячеек с датами (
Дата, а неТекст).
⚠️ Внимание: ФункцияNETWORKDAYSпо умолчанию считает субботу и воскресенье выходными. Если у вас другой график (например, выходной — пятница), используйтеNETWORKDAYS.INTLс параметром[weekend].
FAQ: Ответы на частые вопросы
Как в Excel вставить дату, которая не будет меняться при открытии файла?
Есть три способа:
- Введите дату вручную (например,
15.05.2026). - Используйте сочетание клавиш
Ctrl+;— это вставит статичную текущую дату. - Преобразуйте формулу
=TODAY()в значение: выделите ячейку →Копировать→Специальная вставка → Значения.
Почему после копирования даты из Excel в Word она отображается как число?
Excel хранит даты как числа (количество дней с 1900 года). При копировании в текстовые редакторы это число может отобразиться "как есть". Решения:
- 📋 Скопируйте дату как текст: выделите ячейку →
Формат ячеек → Текстовый→ скопируйте. - 📋 В Word вставьте как
Специальная вставка → Текст. - 📋 Используйте функцию
=TEXT(A1,"д.мм.гггг")в Excel перед копированием.
Как посчитать количество рабочих дней между двумя датами, исключая праздники?
Используйте функцию NETWORKDAYS с третьим аргументом — диапазоном праздников:
=NETWORKDAYS(A2; B2; D2:D10)
Где D2:D10 — список праздничных дат. Пример:
| Ячейка | Значение |
|---|---|
| A2 | 01.01.2026 |
| B2 | 15.05.2026 |
| D2:D5 | 01.01.2026 07.01.2026 08.03.2026 01.05.2026 |
Формула вернёт количество рабочих дней за вычетом выходных и указанных праздников.
Можно ли в Excel отобразить дату на русском языке (например, "15 мая")?
Да, для этого используйте пользовательский формат или функцию TEXT:
- Через формат ячеек:
- Выделите ячейку →
Ctrl+1→Все форматы. - Введите код:
д ммм(для "15 мая") илид мммм(для "15 мая 2026 года").
- Выделите ячейку →
TEXT:
=TEXT(A1; "д мммм")
Для полного названия месяца в родительном падеже ("15 мая 2026 года") используйте:
=TEXT(A1; "д мммм \"года\"")
Как автоматически обновлять дату при изменении данных в таблице?
Если вам нужно, чтобы дата обновлялась не только при открытии файла, но и при любых изменениях в книге, используйте одну из хитростей:
- 🔄 Добавьте волшебную ячейку:
- Создайте скрытую ячейку (например,
Z1) с формулой=NOW(). - В нужной ячейке используйте
=Z1и отформатируйте как дату. - Теперь при любом изменении в книге дата будет обновляться (так как
NOW()пересчитывается).
- Создайте скрытую ячейку (например,
- 🤖 Используйте VBA-макрос:
Private Sub Worksheet_Calculate()Range("A1").Value = Now ' Обновляет дату в A1 при любом пересчёте
End Sub
⚠️ Внимание: Частые пересчётыNOW()могут замедлять работу с большими файлами. Отключите автоматический пересчёт вФормулы → Параметры вычислений → Вручную, если это критично.