Работа с датами в Microsoft Excel — одна из самых востребованных задач при ведении отчётности, планировании или анализе данных. Часто пользователям требуется автоматически проставлять вчерашнюю дату в ячейках: для отслеживания просроченных заданий, фиксации даты последнего обновления или создания динамических отчётов. В отличие от текущей даты (которую можно вставить клавишей Ctrl+;), вчерашняя требует немного других подходов.
В этой статье мы разберём 5 рабочих методов, как поставить вчерашнюю дату в Excel — от простейших формул до автоматизации через VBA. Вы узнаете, как сделать так, чтобы дата обновлялась автоматически при каждом открытии файла, как зафиксировать статическое значение, и какие подводные камни могут встретиться при работе с разными форматами ячеек. Особое внимание уделим нюансам для Excel 365, Excel 2019 и более старых версий.
Независимо от вашего уровня — новичок или опытный пользователь — здесь найдётся решение под вашу задачу. А если вы работаете с Google Sheets, в конце статьи есть отдельный раздел с адаптацией формул для этого сервиса.
1. Самый простой способ: формула =TODAY()-1
Начнём с базового метода, который работает во всех версиях Excel — от Excel 2007 до Microsoft 365. Формула =TODAY()-1 вычитает один день из текущей даты, возвращая вчерашнюю. Этот способ идеален, если вам нужно, чтобы дата автоматически обновлялась при каждом пересчёте листа или открытии файла.
Как это работает:
- 📅 Функция
TODAY()возвращает текущую дату (сегодня). - 🔢 Вычитание
-1сдвигает её на один день назад. - 🔄 Формула динамическая: при открытии файла завтра она покажет уже "вчера" относительно новой текущей даты.
Пример использования:
- Выделите ячейку, куда нужно вставить дату (например,
A1). - Введите формулу:
=TODAY()-1 - Нажмите
Enter. - При необходимости отформатируйте ячейку как дату через
Главная → Формат → Формат ячеек(выберите нужный формат, например,14.03.2026).
⚠️ Внимание: Если дата отображается как число (например, 45342), значит у ячейки установлен общий формат. Измените его на дата вручную.
Выделите ячейку с формулой|Убедитесь, что в строке формул отображается `=TODAY()-1`|Проверьте формат ячейки (должен быть "Дата")|Обновите лист клавишей `F9` — дата должна измениться на актуальную "вчерашнюю"-->
2. Статическая вчерашняя дата: как зафиксировать значение
Если вам нужно, чтобы вчерашняя дата не изменялась при пересчёте листа (например, для архивных записей), используйте комбинацию Ctrl+; (вставка текущей даты) с ручным вычитанием дня. Или примените этот трюк:
- Введите формулу
=TODAY()-1в нужную ячейку. - Скопируйте ячейку (
Ctrl+C). - Щёлкните правой кнопкой по этой же ячейке и выберите
Специальная вставка → Значения(или нажмитеCtrl+Alt+V → В).
Теперь в ячейке останется фиксированное значение вчерашней даты, которое не будет обновляться. Этот метод полезен для:
- 📊 Отчётов, где дата создания должна оставаться неизменной.
- 📋 Логов действий (например, "Последнее редактирование: 13.03.2026").
- 📅 Архивных данных, где важна историческая точность.
Альтернативный способ — использовать функцию =NOW()-1, но она вернёт дату и время. Чтобы оставить только дату, оберните её в =INT(NOW()-1) или отформатируйте ячейку как дата без времени.
3. Вчерашняя дата без выходных: функция WORKDAY()
Что делать, если вам нужна не просто вчерашняя дата, а последний рабочий день? Например, если сегодня понедельник, то "вчера" с точки зрения рабочих дней — это пятница. Для этого в Excel есть функция WORKDAY().
Синтаксис:
=WORKDAY(начальная_дата; дни; [праздники])
Чтобы получить вчерашний рабочий день, используйте:
=WORKDAY(TODAY(); -1)
Если у вас есть список праздников (например, в диапазоне D1:D10), добавьте его третьим аргументом:
=WORKDAY(TODAY(); -1; D1:D10)
| Формула | Результат (если сегодня 15.03.2026, пятница) | Результат (если сегодня 18.03.2026, понедельник) |
|---|---|---|
=TODAY()-1 |
14.03.2026 (четверг) | 17.03.2026 (воскресенье) |
=WORKDAY(TODAY(); -1) |
14.03.2026 (четверг) | 15.03.2026 (пятница) |
=WORKDAY(TODAY(); -1; D1:D10) |
14.03.2026 (если 14.03 не праздник) | 13.03.2026 (если 15.03 был праздником) |
Эта функция особенно полезна для:
- 📈 Финансовых отчётов, где важны только рабочие дни.
- 📦 Логистики (сроки доставки не считают выходные).
- 🏢 HR-систем (отпуска, больничные).
Ежедневно|Несколько раз в неделю|Редко|Никогда-->
4. Автоматическое обновление даты при открытии файла
По умолчанию формулы в Excel пересчитываются при изменении данных или открытии файла. Но если у вас отключён автоматический пересчёт (например, для ускорения работы с большими файлами), дата может "застыть". Чтобы гарантированно обновлять вчерашнюю дату при каждом открытии, используйте VBA-макрос.
Инструкция:
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - В окне
Projectдважды кликните по объектуThisWorkbook. - Вставьте этот код:
ЗаменитеPrivate Sub Workbook_Open()Sheets("Лист1").Range("A1").Value = Date - 1
End Sub
"Лист1"на имя вашего листа, а"A1"— на нужную ячейку. - Сохраните файл как
.xlsm(с поддержкой макросов).
Теперь при каждом открытии файла в ячейке A1 будет автоматически проставляться вчерашняя дата. Этот метод подходит для:
- 📅 Ежедневных отчётов, где дата должна фиксироваться при открытии.
- 🔄 Шаблонов, где важна актуальность данных.
- 🤖 Автоматизированных систем (например, логирование действий).
⚠️ Внимание: Макросы работают только в файлах с расширением.xlsm. Если сохранить файл как.xlsx, код не выполнится, а Excel покажет предупреждение о потере макросов.
Как отладить макрос, если он не работает?
1. Убедитесь, что макросы разрешены в настройках безопасности (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Настройки макросов).
2. Проверьте имя листа в коде — оно должно совпадать с реальным именем (с учётом регистра!).
3. Если файл открывается в защищённом режиме, макрос не выполнится. Разрешите редактирование при открытии.
4. Для отладки нажмите F8 в редакторе VBA, чтобы выполнить код по шагам.
5. Вчерашняя дата в Google Sheets: отличия от Excel
Если вы работаете в Google Таблицах, все описанные выше формулы будут работать, но есть нюансы:
- 📱 Функция
TODAY()в Google Sheets обновляется при каждом изменении листа (а не только при открытии файла, как в Excel). - ⏱️ Для принудительного пересчёта нажмите
F9илиShift+F9(пересчёт текущего листа). - 🤖 Макросы в Google Sheets пишутся на Google Apps Script, а не на VBA. Пример кода для автоматической вставки вчерашней даты:
function onOpen() {var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Лист1");
sheet.getRange("A1").setValue(new Date(new Date().setDate(new Date().getDate() - 1)));
}
Чтобы в Google Sheets зафиксировать статическую вчерашнюю дату:
- Введите в ячейку
=TODAY()-1. - Скопируйте ячейку (
Ctrl+C). - Вставьте как
Значения только(Ctrl+Shift+V).
Для рабочих дней используйте ту же функцию =WORKDAY(), но учтите, что в Google Sheets она может требовать указания праздников в отдельном диапазоне.
6. Распространённые ошибки и как их избежать
Даже с простыми формулами пользователи сталкиваются с проблемами. Вот TOP-5 ошибок при работе с вчерашней датой в Excel и их решения:
| Ошибка | Причина | Решение |
|---|---|---|
Дата отображается как число (например, 45342) |
Неверный формат ячейки | Выделите ячейку → Главная → Формат → Формат ячеек → Дата |
| Формула не обновляется при открытии файла | Отключён автоматический пересчёт | Включите в Формулы → Параметры вычислений → Автоматически |
#ИМЯ? в ячейке |
Опечатка в названии функции (например, TODAYY()) |
Проверьте синтаксис: правильно TODAY(), а не TODAY или DATE() |
| Макрос не работает | Файл сохранён как .xlsx вместо .xlsm |
Сохраните файл с поддержкой макросов (Файл → Сохранить как → Тип файла: Книга Excel с поддержкой макросов (*.xlsm)) |
WORKDAY возвращает ошибку |
Не указан диапазон праздников (если они есть) | Добавьте третий аргумент: =WORKDAY(TODAY(); -1; D1:D10), где D1:D10 — список праздников |
Ещё одна типичная проблема — разница часовых поясов. Если ваш компьютер настроен на UTC, а отчётность ведётся по местному времени, дата может сбиваться. Чтобы этого избежать, используйте функцию =TODAY()-1+TIME(0;0;0) — она сбросит время к началу дня.
7. Продвинутые приёмы: динамические диапазоны и условное форматирование
Вчерашнюю дату можно использовать не только как статическое значение, но и для динамической фильтрации данных или визуального выделения просроченных задач. Рассмотрим два продвинутых сценария:
Сценарий 1: Фильтрация данных по вчерашней дате
Допустим, у вас есть таблица с колонкой Дата выполнения, и вам нужно отобразить только строки, где дата равна вчерашней. Для этого:
- Выделите диапазон данных (включая заголовки).
- Перейдите в
Данные → Фильтр. - Нажмите на стрелочку фильтра в колонке с датой и выберите
Фильтры по дате → Настраиваемый фильтр. - Установите условие:
равнои введите формулу=TODAY()-1.
Сценарий 2: Выделение просроченных задач
Чтобы автоматически подсвечивать задачи с вчерашней (или более ранней) датой:
- Выделите диапазон с датами.
- Перейдите в
Главная → Условное форматирование → Создать правило. - Выберите
Использовать формулу для определения форматируемых ячеек. - Введите формулу:
Где=A1<=TODAY()-1A1— первая ячейка выделенного диапазона. - Задайте формат (например, красный фон или шрифт).
Эти приёмы полезны для:
- 📋 Систем управления задачами (Trello-подобные таблицы).
- 📊 Дашбордов с индикаторами просрочки.
- 📅 Календарей событий (выделение прошедших мероприятий).
FAQ: Частые вопросы о вчерашней дате в Excel
Можно ли вставить вчерашнюю дату без формул?
Да, но это будет статическое значение. Нажмите Ctrl+; (вставится текущая дата), затем вручную отнимите один день. Или используйте метод со специальной вставкой (описан в разделе 2).
Почему формула =TODAY()-1 показывает неправильную дату?
Вероятные причины:
- На компьютере неправильно установлена текущая дата/время (проверьте в системном трее).
- Файл Excel открыт в режиме
Только для чтения— формулы не пересчитываются. - В настройках Excel отключён автоматический пересчёт (
Формулы → Параметры вычислений).
Как сделать так, чтобы вчерашняя дата обновлялась только один раз в день?
Используйте макрос с проверкой времени последнего обновления:
Private Sub Workbook_Open()
If Range("LastUpdate").Value <> Date Then
Range("A1").Value = Date - 1
Range("LastUpdate").Value = Date
End If
End Sub
Где LastUpdate — имя ячейки, хранящей дату последнего обновления (спрячьте её на отдельном листе).
Работает ли =TODAY()-1 в Excel Online?
Да, но с оговорками:
- Формула обновляется при редактировании ячейки или листа.
- Макросы VBA в Excel Online не поддерживаются.
- Для принудительного пересчёта нажмите
F9(в браузере).
Можно ли получить вчерашнюю дату в формате "13 марта 2026 года"?
Да, используйте функцию =TEXT():
=TEXT(TODAY()-1; "d mmmm yyyy года")
Результат: 13 марта 2026 года. Другие форматы:
"dd.mm.yyyy"→13.03.2026"ddd, mmmm dd"→ср, март 13