Расчёт срока годности в Excel: формулы, примеры и автоматизация

Контроль сроков годности — критически важная задача для аптек, складов, лабораторий и пищевых производств. Даже небольшая ошибка в учёте может привести к штрафам, порче продукции или угрозе здоровью. Excel позволяет автоматизировать этот процесс, исключая человеческий фактор: от простого вычитания дат до сложных систем оповещений с цветовой маркировкой.

В этой статье вы найдёте практические решения для разных сценариев: как посчитать остаток срока годности, настроить уведомления о просрочке, визуализировать данные с помощью условного форматирования и даже интегрировать Excel с системами штрихкодирования. Мы разберём уникальные формулы для работы с датами, которые не встретишь в стандартных руководствах — например, как учитывать рабочие дни или исключать выходные из расчётов.

Базовые формулы для расчёта сроков годности

Начнём с простейшего: вычисления количества дней между текущей датой и датой истечения срока. Для этого достаточно функции РАЗНДАТ (или DATEDIF в английской версии). Например, если дата производства находится в ячейке A2, а срок годности в месяцах — в B2, формула для даты истечения будет:

=ДАТА(ГОД(A2); МЕСЯЦ(A2)+B2; ДЕНЬ(A2))

Чтобы узнать, сколько дней осталось до окончания срока, используйте:

=РАЗНДАТ(СЕГОДНЯ(); ДАТА(ГОД(A2); МЕСЯЦ(A2)+B2; ДЕНЬ(A2)); "d")
  • 📅 ДАТА() — создаёт дату из года, месяца и дня. Подходит для расчёта даты истечения.
  • РАЗНДАТ() — вычисляет разницу между датами в днях, месяцах или годах. Аргумент "d" возвращает дни.
  • 🔄 СЕГОДНЯ() — динамически обновляет текущую дату при каждом открытии файла.

Важно: если срок годности указан в днях (например, 30 суток), формула упрощается до =A2 + B2, где A2 — дата производства, а B2 — количество дней.

Учёт рабочих дней: исключаем выходные и праздники

Для продуктов с ограниченным сроком хранения в рабочих днях (например, скоропортящихся товаров, требующих контроля в будни) стандартная функция РАЗНДАТ не подходит. Здесь поможет ЧИСТРАБДНИ (или NETWORKDAYS):

=ЧИСТРАБДНИ(СЕГОДНЯ(); ДАТА_ИСТЕЧЕНИЯ)

Чтобы исключить также праздничные дни, добавьте третий аргумент — диапазон с датами праздников:

=ЧИСТРАБДНИ(СЕГОДНЯ(); ДАТА_ИСТЕЧЕНИЯ; Праздники!A2:A20)
  • 🏢 ЧИСТРАБДНИ — считает только рабочие дни (пн-пт), игнорируя субботу и воскресенье.
  • 🎉 Диапазон праздников — создайте отдельный лист с перечнем официальных праздников вашего региона.
  • ⚠️ Региональные особенности — в некоторых странах рабочая неделя может начинаться с воскресенья. Настройте это в Параметры Excel → Календарь.
📊 Какой тип сроков годности вы чаще рассчитываете?
В календарных днях
В рабочих днях
В месяцах/годах
Не рассчитываю

Условное форматирование: визуальные оповещения о просрочке

Цветовая маркировка помогает быстро идентифицировать просроченные или близкие к истечению сроки. Например, чтобы выделить красным ячейки с просроченными товарами:

  1. Выделите диапазон с датами истечения.
  2. Перейдите на вкладку Главная → Условное форматирование → Правила выделения ячеек → Меньше.
  3. Введите формулу =СЕГОДНЯ() и выберите красный цвет заливки.

Для более гибкой настройки используйте формулы в условном форматировании:

=И(ДАТА_ИСТЕЧЕНИЯ-СЕГОДНЯ()<=30; ДАТА_ИСТЕЧЕНИЯ>СЕГОДНЯ())

Эта формула выделит жёлтым товары, у которых осталось менее 30 дней до истечения срока.

Цвет Условие Формула
Красный Просрочено =ДАТА_ИСТЕЧЕНИЯ<СЕГОДНЯ()
Жёлтый Менее 30 дней =РАЗНДАТ(СЕГОДНЯ();ДАТА_ИСТЕЧЕНИЯ;"d")<=30
Зелёный Более 90 дней =РАЗНДАТ(СЕГОДНЯ();ДАТА_ИСТЕЧЕНИЯ;"d")>90
Как добавить градиентную заливку?

Чтобы создать плавный переход цветов (например, от зелёного к красному), используйте "Управление правилами" в условном форматировании. Добавьте 3-4 правила с разными пороговыми значениями и назначьте каждому свой оттенок.

Автоматизация с помощью Power Query

Если вы работаете с большими объёмами данных (например, сканируете штрихкоды товаров), ручной ввод дат неэффективен. Power Query позволяет импортировать данные из внешних источников (баз данных, CSV-файлов) и автоматически рассчитывать сроки годности.

Пример шагов для импорта данных из CSV:

  1. Перейдите на вкладку Данные → Получить данные → Из файла → Из текстового/CSV.
  2. Выберите файл со списком товаров и датами производства.
  3. В редакторе Power Query добавьте столбец с формулой:
    = Date.AddMonths([Дата_производства], [Срок_в_месяцах])
  4. Загрузите данные в Excel.

Преимущество этого метода — динамическое обновление: при изменении исходного файла достаточно нажать "Обновить" на вкладке Данные, и все расчёты пересчитаются автоматически.

Добавить источник данных|Создать столбец с датой истечения|Преобразовать типы данных в "Дата"|Загрузить в таблицу Excel|Настроить условное форматирование-->

Интеграция с штрихкодами и сканерами

Для складов и аптек актуальна задача связать штрихкоды товаров с их сроками годности. Это можно реализовать через:

  • 📦 VBA-макросы — скрипты, которые считывают данные со сканера и автоматически заполняют таблицу.
  • 🔗 Power Apps — создание мобильного приложения для сканирования и отправки данных в Excel.
  • 🖥️ Готовые надстройки — например, Barcode Add-In for Excel (платные решения).

Пример VBA-кода для обработки штрихкода (предполагается, что штрихкод содержит дату производства в формате ГГММДД):

Sub ProcessBarcode()

Dim barcode As String

Dim prodDate As Date

barcode = InputBox("Отсканируйте штрихкод:")

prodDate = DateSerial(Left(barcode, 2), Mid(barcode, 3, 2), Right(barcode, 2))

ActiveCell.Value = prodDate

ActiveCell.Offset(0, 1).Value = DateAdd("m", 12, prodDate) ' Срок 12 месяцев

End Sub

⚠️ Внимание: При работе со сканерами убедитесь, что Excel настроен на автоматический ввод данных (Параметры → Дополнительно → Разрешить редактирование прямо в ячейках). Иначе сканированные значения могут не попадать в нужные поля.

Продвинутые сценарии: динамические отчёты и оповещения

Для менеджеров складов полезно создавать сводные отчёты по категориям товаров с истекающими сроками. Используйте сводные таблицы с фильтрами по:

  • 📊 Категории товара (лекарства, продукты, химикаты).
  • Остатку дней (0–30, 31–90, 90+).
  • 🏭 Поставщику — чтобы оперативно связаться при выявлении просрочки.

Для автоматических оповещений по email настройте Outlook + VBA:

Sub SendExpiryAlert()

Dim OutApp As Object, OutMail As Object

Dim rng As Range, cell As Range

Set rng = Range("A2:A100") ' Диапазон с датами истечения

For Each cell In rng

If cell.Value < Date And cell.Offset(0, 1).Value = "" Then ' Если просрочено и не отправлено уведомление

Set OutApp = CreateObject("Outlook.Application")

Set OutMail = OutApp.CreateItem(0)

With OutMail

.To = "manager@example.com"

.Subject = "Просрочен товар: " & cell.Offset(0, -1).Value

.Body = "Дата истечения: " & cell.Value & vbCrLf & "Наименование: " & cell.Offset(0, -1).Value

.Send

End With

cell.Offset(0, 1).Value = "Уведомление отправлено" ' Метка для избежания повторных писем

End If

Next cell

End Sub

⚠️ Внимание: Перед использованием VBA-скриптов для отправки писем убедитесь, что ваш Outlook настроен на работу с макросами, иначе письма не уйдут. Также проверьте папку "Исходящие" на наличие неотправленных сообщений.

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

Даже опытные пользователи Excel допускают ошибки при работе с датами. Вот самые распространённые:

  • 🗓️ Неправильный формат ячеек — если ячейка отформатирована как "Текст", Excel не распознаёт дату. Исправляйте через Формат ячеек → Дата.
  • 🔢 Округление в формулах — функция РАЗНДАТ может давать неточные результаты при работе с месяцами (например, 1 месяц ≠ 30 дней). Используйте дни для точности.
  • 🌍 Региональные настройки — в американском Excel даты вводятся как ММ/ДД/ГГГГ, а в российском — ДД.ММ.ГГГГ. Это может сломать формулы при переносе файлов.

Чтобы проверить корректность расчётов, используйте тестовые данные:

Дата производства Срок (месяцев) Ожидаемая дата истечения Формула
01.01.2023 6 01.07.2023 =ДАТА(2023;1+6;1)
15.02.2023 1 15.03.2023 =ДАТА(2023;2+1;15)
31.12.2023 1 31.01.2026 =ДАТАМЕС(ДАТА(2023;12;31);1)

Обратите внимание на последний пример: функция ДАТАМЕС (или EDATE) корректно обрабатывает переход через конец года, в отличие от ручного сложения месяцев.

FAQ: Ответы на частые вопросы

Как посчитать срок годности, если он указан в годах?

Используйте функцию ДАТАМЕС с умножением на 12 (чтобы перевести годы в месяцы):

=ДАТАМЕС(ДАТА_ПРОИЗВОДСТВА; СРОК_В_ГОДАХ*12)

Например, для даты производства 01.01.2020 и срока 2 года результат будет 01.01.2022.

Можно ли учитывать только будни при расчёте срока?

Да, используйте комбинацию функций ЧИСТРАБДНИ и РАБДЕНЬ:

=РАБДЕНЬ(ДАТА_ПРОИЗВОДСТВА; СРОК_В_ДНЯХ; [Диапазон_праздников])

Где [Диапазон_праздников] — это список дат праздников на отдельном листе.

Как сделать так, чтобы Excel предупреждал о просрочке заранее?

Настройте условное форматирование с формулой, которая срабатывает за N дней до истечения:

=И(РАЗНДАТ(СЕГОДНЯ();ДАТА_ИСТЕЧЕНИЯ;"d")<=30;РАЗНДАТ(СЕГОДНЯ();ДАТА_ИСТЕЧЕНИЯ;"d")>0)

Эта формула выделит ячейки, если до истечения осталось от 1 до 30 дней.

Как импортировать даты из 1С или другой программы?

Используйте Power Query:

  1. Экспортируйте данные из 1С в CSV или Excel.
  2. В Excel: Данные → Получить данные → Из файла.
  3. В Power Query преобразуйте столбец с датами в формат "Дата" (выделите столбец → "Преобразовать → Дата").
  4. Добавьте столбец с формулой для расчёта срока годности.

Для автоматического обновления настройте Связь с данными.

Что делать, если даты в Excel отображаются как числа (например, 44197)?

Это внутренний формат хранения дат в Excel (количество дней с 01.01.1900). Чтобы исправить:

  1. Выделите ячейки с "числами".
  2. Нажмите Ctrl+1 (или правый клик → "Формат ячеек").
  3. Выберите категорию Дата и нужный формат (например, 14.03.2012).

Если даты импортированы из внешнего источника, используйте функцию ДАТАЗНАЧ для преобразования текста в дату:

=ДАТАЗНАЧ("01.01.2023")