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

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

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

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

📊 Где вы чаще всего рассчитываете сроки годности?
На производстве
В аптеке/медицине
На складе продуктов
Дома для личного использования
Другой вариант

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

Начнём с простейшего варианта: у вас есть дата производства и фиксированный срок хранения в днях. Например, йогурт хранится 14 дней с момента изготовления. В Excel это решается одной формулой:

```excel

=Дата_производства + Срок_хранения_в_днях

```

Но даже здесь есть подводные камни. Если дата производства введена как текст (например, "01.05.2026" вместо формата даты), формула вернёт ошибку. Чтобы избежать этого, используйте функцию ДАТАЗНАЧ():

```excel

=ДАТАЗНАЧ("01.05.2026") + 14

```

Для динамического расчёта (когда срок хранения указан в отдельной ячейке) формула примет вид:

```excel

=A2 + B2

```

где A2 — дата производства, а B2 — срок в днях.

⚠️ Внимание: Excel хранит даты как числа (количество дней с 1 января 1900 года). Если после ввода формулы вы видите большое число вместо даты — измените формат ячейки на Дата через контекстное меню.
  • 📅 Формат даты: Убедитесь, что ячейки с датами имеют формат Дата, а не Общий или Текст. Для этого выделите диапазон и выберите формат в меню Главная → Формат → Формат ячеек.
  • Округление: Если срок хранения указан в месяцах (например, 6 месяцев), используйте ДАТАМЕС() вместо сложения дней, чтобы избежать ошибок с количеством дней в месяце:

```excel

=ДАТАМЕС(A2; B2)

```

2. Расчёт с учётом условий хранения

Многие продукты имеют разный срок годности в зависимости от температуры. Например, колбаса хранится 7 дней при +4°C и всего 3 дня при +20°C. Для таких случаев потребуется функция ЕСЛИ() или ВЫБОР().

Пример формулы для колбасы:

```excel

=ЕСЛИ(C2="холодильник"; A2+7; ЕСЛИ(C2="комната"; A2+3; "Укажите условие"))

```

где C2 — ячейка с условием хранения ("холодильник" или "комната").

Для более сложных сценариев (например, 5 температурных зон) удобнее использовать ВЫБОР():

```excel

=A2 + ВЫБОР(D2; 3; 7; 14; 30; 90)

```

где D2 — номер зоны (1 — комната, 2 — холодильник, 3 — морозильник и т.д.), а числа после — соответствующие сроки в днях.

ПродуктХолодильник (+4°C)Комната (+20°C)Морозильник (-18°C)
Молоко5 дней2 часа1 месяц
Куриное филе3 дня4 часа9 месяцев
Хлеб7 дней3 дня3 месяца
Шоколад6 месяцев1 год2 года

3. Учёт выходных и праздничных дней

Если ваш склад работает по графику 5/2 (пять рабочих дней, два выходных), то срок годности в календарных днях не совпадёт с рабочими днями. Например, продукт со сроком 5 дней, произведённый в пятницу, фактически испортится к следующему четвергу (пропуская субботу и воскресенье).

Для таких расчётов используйте функцию РАБДЕНЬ():

```excel

=РАБДЕНЬ(A2; B2)

```

где A2 — дата производства, B2 — срок в рабочих днях.

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

```excel

=РАБДЕНЬ(A2; B2; Праздники!A:A)

```

Важно: функция РАБДЕНЬ() считает субботу и воскресенье выходными по умолчанию. Если ваш график другой (например, выходной — пятница), используйте РАБДЕНЬ.МЕЖД() с указанием выходных дней.
  • 📆 Праздники: Создайте отдельный лист Праздники с перечнем нерабочих дней. Это позволит легко обновлять их ежегодно.
  • ⚙️ Настройка выходных: Для графиков типа "2 через 2" используйте формулу:

    ```excel

    =РАБДЕНЬ.МЕЖД(A2; B2; 1; Праздники!A:A; "1101101")

    ```

    где "1101101" — шаблон выходных (1 — рабочий день, 0 — выходной, начиная с понедельника).

Создать лист с праздничными датами|Проверить формат дат в основной таблице|Выбрать правильную функцию (РАБДЕНЬ или РАБДЕНЬ.МЕЖД)|Указать диапазон праздников в формуле-->

4. Автоматическое оповещение об истечении срока

Визуальное выделение просроченных товаров экономит время на ручной проверке. Для этого используйте условное форматирование:

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

    ```excel

    =И(A2<СЕГОДНЯ()+3; A2>=СЕГОДНЯ())

    ```

Для более сложных сценариев (например, разные цвета для разных категорий товаров) используйте формулы в правилах условного форматирования. Пример для мясных продуктов (красный — просрочено, оранжевый — менее 2 дней, жёлтый — менее 5 дней):

```excel

=И($C2="мясо"; A2<СЕГОДНЯ()) → красный

=И($C2="мясо"; A2<=СЕГОДНЯ()+2) → оранжевый

=И($C2="мясо"; A2<=СЕГОДНЯ()+5) → жёлтый

```

⚠️ Внимание: Условное форматирование замедляет работу книги при большом объёме данных (более 10 000 строк). В таких случаях используйте сводные таблицы с фильтрацией по датам или Power Query для предварительной обработки.
Как ускорить работу с большими таблицами

Для таблиц свыше 50 000 строк отключите автоматический пересчёт формул (Формулы → Параметры вычислений → Вручную) и используйте Power Pivot для создания мер. Это уменьшит нагрузку на процессор при применении условного форматирования.

5. Работа с партиями и серийными номерами

На складах часто приходится учитывать партии товара с разными сроками годности. Например, одна партия молока произведена 1 мая, а другая — 5 мая. Для автоматизации такого учёта:

  1. Создайте таблицу с колонками: Серийный номер, Дата производства, Срок годности (дней), Дата истечения.
  2. В ячейке D2 (дата истечения) введите формулу:

    ```excel

    =B2 + C2

    ```

  3. Растяните формулу на весь диапазон.
  4. Добавьте столбец Статус с формулой:

    ```excel

    =ЕСЛИ(D2<СЕГОДНЯ(); "Просрочено"; ЕСЛИ(D2<=СЕГОДНЯ()+3; "Скоро истекает"; "В норме"))

    ```

Для поиска конкретной партии по серийному номеру используйте ВПР() или ИНДЕКС/ПОИСКПОЗ:

```excel

=ВПР("ABC123"; A2:D100; 4; ЛОЖЬ)

```

где "ABC123" — искомый серийный номер, а 4 — номер столбца с датой истечения.

Серийный номерДата производстваСрок (дней)Дата истеченияСтатус
MLK-2026-050101.05.2026506.05.2026Просрочено
MLK-2026-050505.05.2026510.05.2026Скоро истекает
MLK-2026-051010.05.2026515.05.2026В норме

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

Для полной автоматизации учёта сроков годности можно связать Excel с системами штрихкодирования или . Вот два рабочих сценария:

Способ 1: Импорт данных из сканера штрихкодов

  • 📦 Подключите сканер штрихкодов к компьютеру (обычно эмулирует клавиатуру).
  • 📥 Настройте Excel на автоматический ввод данных в нужную колонку (например, Серийный номер).
  • 🔄 Используйте Power Query для очистки данных и сопоставления с базой сроков годности.

Способ 2: Экспорт/импорт из 1С

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

    ```excel

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

    ```

⚠️ Внимание: При импорте данных из 1С проверьте соответствие форматов дат. В 1С даты могут экспортироваться в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС, что потребует дополнительной обработки в Excel через ЛЕВСИМВ() или Power Query.

7. Продвинутые техники: динамические диапазоны и Power Pivot

Если вы работаете с тысячами позиций, статические формулы станут тормозить файл. Решения:

Динамические именованные диапазоны

Создайте именованный диапазон, который автоматически расширяется при добавлении новых строк:

  1. Выделите диапазон с данными (например, A2:D100).
  2. Перейдите в Формулы → Диспетчер имён → Создать.
  3. Введите имя (например, Товары) и формулу:

    ```excel

    =СМЕЩ(Лист1!$A$2;0;0;СЧЁТЗ(Лист1!$A:$A)-1;4)

    ```

Power Pivot для больших данных

  • 📊 Активируйте надстройку Power Pivot (Файл → Параметры → Надстройки → Управление: Надстройки COM → Power Pivot).
  • 🔗 Импортируйте данные в модель.
  • ⚡ Создайте меру для расчёта остатка срока:

    ```dax

    Остаток дней = DATEDIFF(SEGODNYA(); [Дата истечения]; DAY)

    ```

  • 📈 Постройте сводную таблицу с фильтрацией по статусу ("Просрочено", "Скоро истекает").

Преимущество Power Pivot: расчёты выполняются в памяти, а не на листе, что в 10–100 раз ускоряет работу с большими массивами (100 000+ строк).

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

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

  • 🗓️ Текст вместо даты: Если дата введена как текст (выравнивание по левому краю), формулы не сработают. Исправляйте через ДАТАЗНАЧ() или ТЕКСТВДАТУ().
  • Неучтённые временные зоны: Excel не поддерживает временные зоны. Если данные поступают из разных регионов, приведите их к единому стандарту (например, UTC).
  • 🔢 Округление месяцев: Функция ДАТАМЕС() может давать неожиданные результаты при добавлении месяцев к датам в конце месяца. Например, ДАТАМЕС("31.01.2026"; 1) вернёт 28.02.2026, а не 31.02.2026.
  • 🔄 Кэширование формул: При изменении данных старые результаты могут оставаться в кэше. Обновляйте расчёты вручную (Формулы → Пересчитать) или настройте автоматический пересчёт.

Для проверки корректности дат используйте функцию ЕДАТА():

```excel

=ЕДАТА(Дата_производства; Срок_в_месяцах)

```

Она корректно обрабатывает конец месяца, перенося дату на последний день следующего месяца.

FAQ: Частые вопросы по расчёту срока годности в Excel

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

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

=ЕДАТА(A2; B2)

где A2 — дата производства, B2 — срок в месяцах. Если нужно учитывать дни (например, 1 месяц и 5 дней), комбинируйте функции:

=ЕДАТА(A2; ЦЕЛОЕ(B2/30)) + ОСТАТ(B2; 30)
Можно ли автоматически отправлять уведомления о просроченных товарах?

Да, для этого:

  1. Настройте условное форматирование для выделения просроченных позиций.
  2. Создайте макрос, который будет отправлять email через Outlook при открытии файла (требуется VBA).
  3. Или экспортируйте данные в Power Automate (Microsoft Flow) для отправки уведомлений в Teams/Email.

Пример кода VBA для отправки письма:

Sub SendExpiryAlert()

Dim OutApp As Object, OutMail As Object

Set OutApp = CreateObject("Outlook.Application")

Set OutMail = OutApp.CreateItem(0)

With OutMail

.To = "sklad@company.ru"

.Subject = "Просроченные товары на " & Format(Now(), "dd.mm.yyyy")

.Body = "Список просроченных позиций во вложении."

.Attachments.Add ActiveWorkbook.FullName

.Send

End With

Set OutMail = Nothing

Set OutApp = Nothing

End Sub

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

Добавьте столбец Тип упаковки и используйте вложенную функцию ЕСЛИ() или ВПР(). Пример:

=ВПР(A2; Таблица_сроков!A:B; 2; ЛОЖЬ) + B2

где A2 — тип упаковки, Таблица_сроков — справочник с соответствием упаковки и дополнительных дней хранения, B2 — базовый срок.

Для удобства создайте сводную таблицу с фильтрацией по типу упаковки.

Почему формула =СЕГОДНЯ()+30 даёт неверную дату?

Функция СЕГОДНЯ() возвращает текущую дату на момент пересчёта. Если книга не обновлялась (например, была закрыта 5 дней), формула вернёт устаревшее значение. Решения:

  • Настройте автоматический пересчёт (Формулы → Параметры вычислений → Автоматически).
  • Используйте VBA для принудительного обновления при открытии файла:
Private Sub Workbook_Open()

Application.CalculateFull

End Sub

Также проверьте формат ячейки — он должен быть Дата, а не Общий.

Как рассчитать срок годности для продукта с плавающим сроком (например, "3 дня с момента вскрытия")?

Для таких случаев:

  1. Добавьте столбец Дата вскрытия (заполняется вручную или сканером).
  2. Используйте формулу с проверкой:
=ЕСЛИ(NOT(ISBLANK(C2)); C2 + 3; B2 + 30)

где C2 — дата вскрытия, B2 — дата производства, 3 и 30 — сроки в днях до/после вскрытия.

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

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 Then 'Если изменяется столбец A (штрихкод)

Target.Offset(0, 2).Value = Now 'Записать текущую дату в столбец C (дата вскрытия)

End If

End Sub