Контроль сроков годности — критически важная задача для производств, складов и торговых сетей. Ошибка в расчётах может привести к штрафам, порче товара или убыткам. Excel позволяет автоматизировать этот процесс, исключив ручной подсчёт дней и человеческий фактор. Но как правильно настроить формулы, чтобы они учитывали календарные особенности, выходные и даже температурные условия хранения?
Многие пользователи ограничиваются простым вычитанием дат, но это работает только для базовых случаев. Например, если срок годности молока — 5 дней, а сегодня 1 июня, то =A1+5 даст верный результат. Однако что делать, если срок зависит от даты производства (например, "3 месяца с момента изготовления") или нужно учитывать ГОСТ Р 51074-2003, где для некоторых продуктов сроки варьируются в зависимости от сезона? В этой статье разберём реальные кейсы — от простых формул до сложных сценариев с условным форматированием и динамическими диапазонами.
Вы научитесь:
- 📅 Создавать формулы для фиксированных и плавающих сроков годности
- ⚙️ Настраивать автоматические уведомления о приближении истечения срока
- 📊 Визуализировать данные с помощью условного форматирования
- 🔄 Учитывать выходные, праздники и особенности хранения
1. Базовые формулы для расчёта срока годности
Начнём с простейшего варианта: у вас есть дата производства (Дата_изготовления) и фиксированный срок хранения в днях. Например, йогурт хранится 14 дней. Формула будет такой:
=Дата_изготовления + 14
Но что, если срок указан в месяцах или годах? Здесь важно понимать разницу между функциями =ДАТАМЕС() и простым сложением. Например, для срока "3 месяца":
=ДАТАМЕС(Дата_изготовления; 3)
Функция ДАТАМЕС корректно обрабатывает переходы между месяцами разной длины (например, 31 января + 1 месяц = 28/29 февраля). А вот =Дата_изготовления + 90 (3 месяца ≈ 90 дней) даст неверный результат для января — получится 1 апреля вместо 30 апреля.
Для продуктов со сроком "годен до" (например, "до 15.07.2026") никакие расчёты не нужны — просто введите конечную дату в ячейку. Но если срок зависит от даты вскрытия упаковки (как у некоторых соусов), потребуется дополнительная колонка с датой вскрытия и формула:
=ЕСЛИ(Вскрыт="Да"; Дата_вскрытия+30; Дата_изготовления+180)
2. Учёт выходных и праздников в расчётах
Некоторые продукты (например, свежая рыба) имеют срок годности в рабочих днях. В этом случае используйте функцию =РАБДЕНЬ():
=РАБДЕНЬ(Дата_изготовления; 5)
Эта формула добавит 5 рабочих дней, пропуская субботы и воскресенья. Чтобы исключить также праздники, создайте отдельный диапазон с датами праздников (например, D1:D10) и используйте третий аргумент:
=РАБДЕНЬ(Дата_изготовления; 5; Праздники)
Для России в диапазон Праздники включите:
- 🎉 1–8 января (Новогодние каникулы)
- 🎂 23 февраля, 8 марта, 1 мая, 9 мая
- 🏖️ 12 июня, 4 ноября
Как автоматически обновлять список праздников?
Создайте отдельный лист "Праздники" и используйте Power Query для импорта актуального производственного календаря с сайта КонсультантПлюс или календарь Google через API.
Если ваш склад работает по нестандартному графику (например, 2/2), создайте пользовательскую функцию на VBA или используйте комбинацию =РАБДЕНЬ() с корректировкой через =ЕСЛИ().
3. Динамические сроки годности: когда всё не так просто
Некоторые продукты имеют плавающие сроки годности в зависимости от условий хранения. Например, согласно ГОСТ 31688-2012, срок хранения мороженого при -18°C — 6 месяцев, а при -12°C — всего 3 месяца. В Excel это реализуется через вложенные функции =ЕСЛИ():
=ЕСЛИ(Температура=-18; ДАТАМЕС(Дата_изготовления;6);
ЕСЛИ(Температура=-12; ДАТАМЕС(Дата_изготовления;3);
"Недопустимая температура"))
Для более сложных условий (например, когда срок зависит от влажности, освещения или типа упаковки) используйте таблицу соответствий и функцию =ВПР():
| Температура (°C) | Влажность (%) | Срок (месяцы) |
|---|---|---|
| -18 | <60 | 12 |
| -12 | <70 | 6 |
| -8 | <75 | 3 |
| 0 | Любая | 1 |
Формула для ячейки с датой истечения:
=ДАТАМЕС(Дата_изготовления; ВПР(Температура; Таблица_сроков; 3; ЛОЖЬ))
4. Условное форматирование: визуальный контроль сроков
Чтобы быстро идентифицировать просроченные или близкие к истечению срока товары, настройте условное форматирование:
- Выделите колонку с датой истечения срока годности.
- Перейдите на вкладку
Главная → Условное форматирование → Правила выделения ячеек. - Выберите "Меньше чем" и введите
=СЕГОДНЯ()(для просроченных). - Задайте красный цвет текста или заливки.
Для товаров, у которых осталось менее 7 дней, добавьте второе правило с формулой:
=И(Дата_истечения>СЕГОДНЯ(); Дата_истечения-СЕГОДНЯ()<=7)
Пример цветовой схемы:
- 🔴 Красный — просрочено (
Дата_истечения < СЕГОДНЯ()) - 🟠 Оранжевый — осталось ≤7 дней
- 🟡 Жёлтый — осталось ≤30 дней
- 🟢 Зелёный — срок в норме
Выделить колонку с датами|Создать правило для просроченных товаров|Добавить правило для "осталось ≤7 дней"|Применить цветовую схему|Проверить работу на тестовых данных-->
Для складов с большим ассортиментом удобно добавить колонку "Статус" с формулой:
=ЕСЛИ(Дата_истечения<СЕГОДНЯ(); "Просрочено";
ЕСЛИ(Дата_истечения-СЕГОДНЯ()<=7; "Срочно реализовать";
"В норме"))
5. Автоматические уведомления и отчёты
Чтобы не проверять Excel-файл ежедневно, настройте автоматические уведомления:
- Email-оповещения: Используйте Power Automate (Microsoft) или Apps Script (Google Sheets) для отправки письма со списком просроченных товаров.
- Всплывающие напоминания: В Excel создайте правило проверки данных (
Данные → Проверка данных) с сообщением "Товар просрочен!". - Отчёты по расписанию: Настройте
Power Queryдля ежедневного обновления данных из 1С или сканера штрихкодов.
Пример кода для Apps Script (Google Sheets), который отправляет email при истечении срока:
function checkExpiryDates() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Склад");
var data = sheet.getDataRange().getValues();
var today = new Date();
var message = "";
for (var i = 1; i < data.length; i++) {
if (data[i][2] < today) {
message += "Просрочен: " + data[i][0] + " (истекает " + data[i][2] + ")\n";
}
}
if (message) {
MailApp.sendEmail("sklad@example.com", "Просроченные товары", message);
}
}
Sub ScheduleCheck()
Application.OnTime TimeValue("09:00:00"), "CheckExpiryDates"
End Sub
-->
Для крупных складов интегрируйте Excel с 1С или WMS-системами через ODBC или API. Это позволит:
- 📤 Автоматически обновлять данные о поступлении/отгрузке
- 📊 Сверять остатки с фактическим наличием
- 🔔 Получать уведомления в Telegram или мессенджеры
6. Типичные ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при работе со сроками годности. Вот самые распространённые:
⚠️ Внимание: Формат ячеек с датами должен бытьДата, а неОбщийилиТекст. Иначе формулы=ДАТАМЕС()и=РАБДЕНЬ()вернут ошибку#ЗНАЧ!.
Ошибка 1: Игнорирование временной зоны
Если даты вводятся вручную (например, с клавиатуры как "15.07.2026"), Excel может интерпретировать их как UTC, что приведёт к сдвигу на 3–11 часов для России. Всегда используйте:
- 📅 Функцию
=СЕГОДНЯ()для текущей даты - 🕒 Формат ячейки
дд.мм.гггг чч:ммдля точности
Ошибка 2: Неучёт високосных лет
Формула =Дата_изготовления + 365 даст неверный результат для товара, произведённого 29 февраля 2026 года. Используйте =ДАТАГОД(Дата_изготовления; 1).
⚠️ Внимание: При импорте данных из 1С или сканера штрихкодов даты могут приходить в форматеYYYYMMDD(например, "20260715"). Преобразуйте их в нормальный вид с помощью=ДАТА(ЛЕВСИМВ(A1;4); ПСТР(A1;5;2); ПСТР(A1;7;2)).
Ошибка 3: Копирование формул с абсолютными ссылками
Если в формуле используется $A$1 вместо A1, при протягивании вниз она не обновится. Для динамических расчётов всегда проверяйте тип ссылок.
7. Продвинутые техники: сводные таблицы и Power Query
Для анализа больших объёмов данных (например, на распределительном центре) используйте сводные таблицы:
- Создайте таблицу с колонками:
Наименование,Дата_изготовления,Дата_истечения,Категория(молочные, мясные и т.д.). - Вставьте сводную таблицу (
Вставка → Сводная таблица). - Перетащите
Категорияв поле "Строки", аДата_истечения— в "Значения" (с операцией "Количество"). - Добавьте фильтр по дате:
Фильтр по дате → До → Сегодня.
Это позволит быстро увидеть:
- 📦 Какие категории товаров просрочены чаще всего
- 📉 Динамику порчи по месяцам (для выявления проблем с логистикой)
- 🔍 Топ-5 "проблемных" позиций
Для импорта данных из внешних источников (например, SQL-базы или API поставщика) используйте Power Query:
- Перейдите на вкладку
Данные → Получить данные → Из базы данных. - Выберите источник (например,
SQL ServerилиИз веб). - В редакторе Power Query добавьте столбец с расчётом срока годности:
= Date.AddDays([Дата_изготовления], 30)
После загрузки данных настройте автоматическое обновление (Данные → Обновить все) по расписанию.
8. Готовые шаблоны для разных отраслей
В зависимости от сферы деятельности вам могут понадобиться разные шаблоны Excel. Вот примеры для популярных случаев:
| Отрасль | Особенности шаблона | Ключевые формулы |
|---|---|---|
| Пищевая промышленность | Учёт температуры хранения, ГОСТы | =ДАТАМЕС(), =ВПР() |
| Фармацевтика | Сроки годности лекарств, серии | =РАБДЕНЬ(), =ЕСЛИОШИБКА() |
| Косметика | Срок после вскрытия (PAO) | =ЕСЛИ(Вскрыт="Да"; ...) |
| Химическая продукция | Учёт агрегатного состояния | =И(Условие1; Условие2) |
Для пищевой промышленности скачайте шаблон с учётом ГОСТ, где уже прописаны:
- 🥛 Сроки для молочной продукции (по ГОСТ 31450-2013)
- 🍗 Мясные изделия (по ГОСТ 31777-2012)
- 🥖 Хлебобулочные изделия (по ГОСТ 31805-2012)
Для аптек важно учитывать:
- 💊 Срок годности лекарств (указан на упаковке)
- 📅 Дату повторной сертификации
- 🔄 Условия хранения (например, "в защищённом от света месте")
FAQ: Частые вопросы о расчёте сроков годности в Excel
❓ Как рассчитать срок годности, если он указан в формате "годен до конца месяца"?
Используйте функцию =КОНМЕСЯЦА(Дата_изготовления; 0) для текущего месяца или =КОНМЕСЯЦА(Дата_изготовления; Количество_месяцев). Например, для срока "годен до конца текущего месяца + 3 месяца":
=КОНМЕСЯЦА(Дата_изготовления; 3)
❓ Можно ли в Excel учитывать динамические праздники (например, Пасха)?
Да, но потребуется VBA. Создайте функцию для расчёта даты Пасхи (алгоритм Гаусса) и добавьте её в список праздников для =РАБДЕНЬ(). Пример кода:
Function Easter(Y As Integer) As Date
Dim a, b, c, k, p, q, M, N, d, e As Integer
a = Y Mod 19: b = Y \ 100: c = Y Mod 100
k = b \ 4: p = (b + 8) \ 25: q = (b - p + 1) \ 3
M = (15 + b - k - q) Mod 30
N = (4 + b - q) Mod 7
d = (19 * a + M) Mod 30
e = (2 a + 4 b + 6 * d + N) Mod 7
Easter = DateSerial(Y, 3, 22) + d + e + 13
End Function
❓ Как экспортировать данные о сроках годности в 1С?
Используйте Power Query для преобразования данных в формат, совместимый с 1С:
- Экспортируйте таблицу в
.csv(Файл → Сохранить как → CSV). - В 1С импортируйте через
Администрирование → Обмен данными → Импорт из Excel. - Настройте соответствие полей (например,
Номенклатура → Наименование,ДатаГодности → Дата_истечения).
Для автоматического обмена настройте COM-соединение или REST API.
❓ Как рассчитать средний остаточный срок годности по складу?
Добавьте колонку с формулой:
=Дата_истечения - СЕГОДНЯ()
Затем используйте =СРЗНАЧ() для расчёта среднего по всем товарам. Чтобы исключить просроченные (они искажают статистику), применяйте:
=СРЗНАЧЕСЛИ(Остаток_дней; ">0")
❓ Можно ли настроить SMS-оповещения о просрочке?
Да, через сервисы вроде Twilio или SMS.ru. Пример интеграции:
- Создайте Apps Script в Google Sheets с триггером на ежедневное выполнение.
- В скрипте проверяйте даты истечения и формируйте список просроченных товаров.
- Отправляйте данные на API SMS-сервиса:
function sendSMS() {
var message = "Просрочено: Товар1, Товар2";
var url = "https://sms.ru/send?api_id=ВАШ_API_KEY&to=79XXXXXXXXX&text=" + encodeURIComponent(message);
UrlFetchApp.fetch(url);
}