Как в Excel автоматически проставлять дату: от простых функций до VBA

Автоматическое проставление дат в Microsoft Excel и Google Sheets экономит время, исключает ошибки ручного ввода и позволяет создавать динамические отчёты. Но не все знают, что в Excel есть сразу 5 способов автозаполнения дат — от элементарных функций до скриптов на VBA, которые обновляют значения при открытии файла или изменении данных. Эта статья разберёт каждый метод с нюансами: когда использовать СЕГОДНЯ(), как зафиксировать текущую дату горячими клавишами, и почему иногда лучше обойтись без формул вовсе.

Многие пользователи сталкиваются с типичной проблемой: функция ТДАТА() обновляется при каждом пересчёте листа, а нужна статическая дата — например, для фиксации момента создания записи. Другие, напротив, хотят, чтобы дата менялась автоматически, но только при выполнении определённого условия. Мы рассмотрим решения для обоих случаев, включая малоизвестные приёмы с Power Query и макросами.

Перед тем как перейти к инструкциям, ответьте на вопрос: какой тип автодаты вам нужен?

📊 Какой тип автоматической даты вам нужнее?
Динамическая (обновляется при каждом открытии файла)
Статическая (фиксируется один раз)
Условная (проставляется при выполнении условия)
С периодическим обновлением (например, раз в неделю)

1. Функции СЕГОДНЯ() и ТДАТА(): когда использовать и в чём разница

Самый простой способ вставить автоматическую дату в Excel — использовать встроенные функции СЕГОДНЯ() (англ. TODAY()) и ТДАТА() (англ. NOW()). Обе возвращают текущие дату и время, но работают по-разному:

  • 📅 СЕГОДНЯ() — показывает только дату в формате ДД.ММ.ГГГГ (например, 15.05.2026).
  • ТДАТА() — добавляет ещё и время с точностью до секунды (например, 15.05.2026 14:30:45).

Обе функции динамические: они обновляются при каждом пересчёте листа (например, при открытии файла, изменении ячейки или нажатии F9). Это удобно для отслеживания актуальной даты, но создаёт проблемы, если нужно зафиксировать момент создания записи.

Пример использования СЕГОДНЯ() для расчёта количества дней до дедлайна:

=СЕГОДНЯ() - B2

где B2 — ячейка с датой дедлайна. Формула вернёт количество дней, оставшихся до события.

⚠️ Внимание: Если вы скопируете ячейку с СЕГОДНЯ() и вставите её как значение (Ctrl+Shift+V → Значения), формула превратится в статическую дату. Это полезно, когда нужно "заморозить" текущее значение.

2. Как зафиксировать текущую дату без формул (горячие клавиши)

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

Способы вставки текущей даты без формул:

  • 🔑 Ctrl+; — вставляет текущую дату (аналог СЕГОДНЯ(), но статично).
  • Ctrl+Shift+; — вставляет текущее время (аналог части ТДАТА()).
  • 📅 Ctrl+;ПробелCtrl+Shift+; — комбинация для даты и времени в одной ячейке.

Эти клавиши работают в Excel всех версий (включая Excel 365 и Excel 2019) и в Google Sheets. Главное преимущество — дата остаётся неизменной, даже если файл откроют через год.

3. Автоматическая дата при изменении данных (функция ЕСЛИ + СЕГОДНЯ)

Часто требуется проставлять дату только при выполнении условия — например, когда статус задачи меняется на "Выполнено". Для этого комбинируют ЕСЛИ (англ. IF) с СЕГОДНЯ().

Пример формулы для колонки "Дата завершения":

=ЕСЛИ(B2="Выполнено"; СЕГОДНЯ(); "")

где B2 — ячейка со статусом. Дата появится только когда в B2 будет слово "Выполнено".

Проблема такого подхода: если статус изменится обратно, дата обнулится. Чтобы этого избежать, используйте VBA (раздел 5) или Power Query (раздел 6).

Формула Результат Когда использовать
=ЕСЛИ(A1<>""; СЕГОДНЯ(); "") Дата проставляется, если A1 не пустая Для логов: фиксирует дату заполнения ячейки
=ЕСЛИИ(B2="Да"; СЕГОДНЯ(); "") Дата появляется при значении "Да" в B2 Для чек-листов и опросников
=ЕСЛИОШИБКА(СЕГОДНЯ()-C1; "") Показывает разницу в днях или пустую ячейку Для расчёта просрочки

4. Автообновление даты при открытии файла (VBA-макрос)

Если нужно, чтобы дата обновлялась только при открытии книги (а не при каждом изменении листа), используйте макрос на VBA. Это актуально для отчётов, где важно фиксировать дату последнего просмотра.

Инструкция:

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. В окне Project найдите вашу книгу и дважды кликните на ThisWorkbook.
  3. Вставьте код:
    Private Sub Workbook_Open()
    

    Sheets("Лист1").Range("A1").Value = Date

    End Sub

    где "Лист1" — имя листа, а "A1" — ячейка для даты.

  4. Сохраните файл как .xlsm (с поддержкой макросов).

Теперь при каждом открытии файла в ячейке A1 будет текущая дата. Чтобы макрос работал, необходимо разрешить выполнение макросов в настройках безопасности Excel (Файл → Параметры → Центр управления безопасностью → Параметры центра → Включить все макросы).

⚠️ Внимание: Макросы могут быть заблокированы корпоративной политикой безопасности. Если вы работаете в компании, уточните у IT-отдела правила использования VBA.

5. Динамическая дата с периодичностью (например, раз в неделю)

Иногда требуется, чтобы дата обновлялась не ежедневно, а с заданной периодичностью — например, раз в неделю по понедельникам. Для этого комбинируют СЕГОДНЯ() с функцией ДЕНЬНЕД() (англ. WEEKDAY).

Формула для обновления по понедельникам:

=ЕСЛИ(ДЕНЬНЕД(СЕГОДНЯ();2)=1; СЕГОДНЯ(); A1)

где A1 — ячейка с предыдущим значением даты. Формула проверяет, сегодня понедельник (день недели = 1), и обновляет дату только в этот день.

Для других интервалов:

  • 📆 Раз в месяц (1-е число): =ЕСЛИ(ДЕНЬ(СЕГОДНЯ())=1; СЕГОДНЯ(); A1)
  • 🔄 Раз в квартал: =ЕСЛИ(МЕСЯЦ(СЕГОДНЯ())=1; СЕГОДНЯ(); A1) (обновление в январе, апреле, июле, октябре).

1. Выберите ячейку для хранения даты

2. Введите формулу с условием (например, для понедельника)

3. Скопируйте формулу на нужный диапазон

4. Отформатируйте ячейки как дату (Ctrl+1 → Числовой формат → Дата)

5. Проверьте работу, изменив дату в системе (для теста)-->

6. Продвинутые методы: Power Query и события листа

Для сложных сценариев (например, автозаполнение даты при добавлении новой строки) подойдут инструменты Power Query или обработчики событий на VBA.

Способ 1. Power Query (Excel 2016+):

  1. Преобразуйте данные в таблицу (Ctrl+T).
  2. Перейдите на вкладку Данные → Получить данные → Из таблицы/диапазона.
  3. В редакторе Power Query добавьте столбец с текущей датой:
    = DateTime.LocalNow()
  4. Загрузите данные обратно на лист.

Минус: дата обновляется только при ручном обновлении запроса (Данные → Обновить все).

Способ 2. VBA по событию Worksheet_Change:

Этот код проставит дату в колонке B, если изменится значение в колонке A:

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

Target.Offset(0, 1).Value = Date

End If

End Sub

Как вставить код VBA для автодаты?

1. Нажмите Alt+F11 для открытия редактора VBA.

2. В дереве проекта найдите ваш лист (например, Лист1) и дважды кликните на него.

3. Вставьте код в открывшееся окно.

4. Закройте редактор и сохраните файл как .xlsm.

5. Теперь при изменении ячейки в колонке A в соседней колонке B будет проставляться текущая дата.

7. Типичные ошибки и как их избежать

При работе с автоматическими датами пользователи часто сталкиваются с следующими проблемами:

  • Дата не обновляется: Убедитесь, что в настройках Excel включен автоматический пересчёт (Формулы → Параметры вычислений → Автоматически). Если стоит "Вручную", нажмите F9.
  • Формула возвращает ошибку #ИМЯ?: Проверьте регистр функций (в русскоязычном Excel используйте СЕГОДНЯ, а не TODAY).
  • Дата отображается как число: Измените формат ячейки на "Дата" (Ctrl+1 → Числовой формат → Дата).
  • Макрос не работает: Включите поддержку макросов в параметрах безопасности или сохраните файл в формате .xlsm.

Ещё одна распространённая ошибка — использование СЕГОДНЯ() в защищённых ячейках. Если лист защищён, формулы не будут пересчитываться. Чтобы это исправить, разрешите изменение ячеек с датами в настройках защиты (Рецензирование → Защитить лист → Разрешить изменение диапазонов).

FAQ: Частые вопросы об автоматических датах в Excel

Можно ли сделать так, чтобы дата обновлялась только один раз в день, даже если файл открывают несколько раз?

Да, для этого используйте VBA. Создайте макрос, который сравнивает текущую дату с датой в ячейке и обновляет её только если дни отличаются:

Private Sub Workbook_Open()

If Date <> Sheets("Лист1").Range("A1").Value Then

Sheets("Лист1").Range("A1").Value = Date

End If

End Sub

Как в Google Sheets автоматически проставлять дату?

В Google Sheets работают те же функции: =TODAY() и =NOW(). Для статической даты используйте комбинации:

  • Ctrl+; — текущая дата,
  • Ctrl+Shift+; — текущее время.

Для условного проставления даты применяйте =IF:

=IF(B2="Done"; TODAY(); "")
Почему функция ТДАТА() показывает неправильное время?

ТДАТА() берёт время из системных настроек компьютера. Если оно сбивается, проверьте:

  1. Часовой пояс в Windows (Параметры → Время и язык → Дата и время).
  2. Настройки синхронизации времени с сервером.
  3. Формат ячейки в Excel (должен быть "Дата" или "Дата и время").

Если проблема остаётся, обновите время вручную или перезагрузите компьютер.

Можно ли автоматически проставлять дату в Excel Online?

В веб-версии Excel (Excel Online) функции СЕГОДНЯ() и ТДАТА() работают, но макросы VBA недоступны. Для статической даты используйте горячие клавиши (Ctrl+;), а для динамической — формулы. Автообновление при открытии файла в Excel Online невозможно.

Как сделать так, чтобы дата обновлялась только при изменении конкретной ячейки?

Используйте VBA-код с обработчиком события Worksheet_Change (см. раздел 6). Пример кода для обновления даты в ячейке B1 при изменении A1:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("A1")) Is Nothing Then

Range("B1").Value = Date

End If

End Sub