Контроль сроков годности — критически важная задача для складов, аптек, магазинов и производств. Ошибка в расчётах может привести к штрафам, порче товаров или угрозе здоровью клиентов. Excel позволяет автоматизировать этот процесс, исключая человеческий фактор. Но как именно настроить таблицу, чтобы она сама считала дни до истечения срока, выделяла просрочку и отправляла уведомления?
Многие пользователи ошибочно думают, что достаточно просто вычесть даты — но это работает только для статичных данных. На практиже нужно учитывать динамические даты (например, "сегодня"), условное форматирование для визуального контроля, а также особенности хранения (например, "годен в течение 6 месяцев с даты производства"). В этой статье разберём 3 метода расчёта — от базового до продвинутого — с готовыми формулами и шаблонами.
Если вы работаете с большими партиями товаров, ручной контроль сроков годности отнимает часы каждый день. Excel может взять эту рутину на себя: достаточно один раз настроить формулы, и программа будет автоматически:
- 📅 Считать оставшиеся дни до истечения срока
- 🚨 Выделять просроченные товары красным цветом
- 📊 Сортировать продукцию по приоритету реализации
- 📤 Экспортировать отчёты для проверок
1. Базовый метод: вычитание дат
Самый простой способ — вычесть из даты истечения срока годности текущую дату. Для этого используем формулу:
=ДАТА.ГОД(сегодня(); год_истечения; месяц_истечения) - СЕГОДНЯ()
Но на практике удобнее хранить дату истечения в одной ячейке (например, A2). Тогда формула упрощается:
=A2 - СЕГОДНЯ()
Эта формула вернёт количество дней до истечения срока. Если значение отрицательное — товар просрочен. Чтобы избежать ошибок:
- 📌 Используйте формат ячейки
ОбщийилиЧисловойдля результата - 📌 Убедитесь, что даты введены корректно (Excel распознаёт их как числа)
- 📌 Для дат в текстовом формате (например, "31.12.2026") используйте
=ДАТАЗНАЧ(A2)
⚠️ Внимание: ФормулаСЕГОДНЯ()пересчитывается при каждом открытии файла. Если вам нужно зафиксировать дату проверки, используйтеCTRL + ;для вставки статичной даты.
| Тип товара | Дата производства | Срок годности (дней) | Дата истечения | Дней до просрочки |
|---|---|---|---|---|
| Йогурт | 15.05.2026 | 30 | =A2+B2 | =C2-СЕГОДНЯ() |
| Мука | 10.03.2026 | 180 | =A3+B3 | =C3-СЕГОДНЯ() |
| Консервы | 05.01.2026 | 720 | =A4+B4 | =C4-СЕГОДНЯ() |
2. Расчёт по дате производства + срок хранения
Часто на упаковке указан не конечный срок, а продолжительность хранения (например, "6 месяцев"). В этом случае нужно прибавить срок к дате производства. Используем функцию ДАТАМЕС():
=ДАТАМЕС(дата_производства; количество_месяцев)
Пример для товара со сроком хранения 6 месяцев:
=ДАТАМЕС(A2; 6)
Для дней используйте простое сложение:
=A2 + 30 // для 30 дней
Комбинируем с предыдущей формулой, чтобы получить дни до истечения:
=ДАТАМЕС(A2; B2) - СЕГОДНЯ()
Где A2 — дата производства, B2 — срок в месяцах.
Указать дату производства в формате ДД.ММ.ГГГГ
Преобразовать срок хранения в дни/месяца (например, 1 год = 12 месяцев)
Использовать ДАТАМЕС() для месяцев или простое сложение для дней
Вычесть СЕГОДНЯ() для получения оставшихся дней
Применить условное форматирование для просроченных товаров-->
⚠️ Внимание: ФункцияДАТАМЕС()может давать неточности при работе с концами месяцев. Например, 31 января + 1 месяц = 28 февраля. Для критических расчётов используйте альтернативу:=A2 + (B2*30)(где B2 — срок в месяцах).
3. Условное форматирование для визуального контроля
Чтобы просроченные товары сразу бросались в глаза, настройте цветовую индикацию:
- Выделите столбец с днями до истечения срока
- Перейдите на вкладку
Главная → Условное форматирование → Правила выделения ячеек - Выберите "Меньше чем" и укажите значение
0 - Задайте красный цвет текста или заливки
- Добавьте второе правило для значений "между 0 и 7" с жёлтой заливкой (предупреждение)
Для более гибкой настройки используйте формулы в условном форматировании:
- 🔴 Просрочка:
=A1<СЕГОДНЯ() - 🟡 Предупреждение (менее 7 дней):
=И(A1>=СЕГОДНЯ(); A1-СЕГОДНЯ()<=7) - 🟢 Норма:
=A1>СЕГОДНЯ()+7
4. Работа с нестандартными сроками годности
Некоторые товары имеют плавающие сроки хранения. Например:
- 🥛 Молочные продукты: "годен 5 дней с момента вскрытия упаковки"
- 💊 Лекарства: "использовать в течение 28 дней после первого открытия"
- 🍷 Вино: "срок хранения после розлива — 3 года"
Для таких случаев потребуется дополнительный столбец с датой вскрытия/розлива. Формула примет вид:
=ЕСЛИ(дата_вскрытия<>""; дата_вскрытия + срок_после_вскрытия; дата_производства + общий_срок)
Пример для йогурта (общий срок 30 дней, после вскрытия — 5 дней):
=ЕСЛИ(C2<>""; C2+5; A2+30)
Где:
A2— дата производстваB2— общий срок (30 дней)C2— дата вскрытия (если указана)
Как учитывать выходные дни в расчётах?
Если вам нужно игнорировать выходные при подсчёте рабочих дней до истечения срока, используйте функцию ЧИСТРАБДНИ():
=ЧИСТРАБДНИ(СЕГОДНЯ(); дата_истечения)
Эта функция автоматически исключает субботы, воскресенья и праздники (если они указаны в настройках Excel).
5. Автоматизация с помощью Power Query
Для крупных баз данных (тысячи позиций) ручной ввод формул неэффективен. Power Query позволяет:
- Импортировать данные из 1С, SQL или внешних файлов
- Автоматически рассчитывать сроки годности при обновлении
- Объединять данные из нескольких источников
Алгоритм настройки:
- Перейдите на вкладку
Данные → Получить данные → Из таблицы/диапазона - В редакторе Power Query добавьте пользовательский столбец с формулой:
= Date.From([Дата_производства]) + #duration(30,0,0,0) // для 30 дней - Загрузите данные обратно в Excel
Преимущество этого метода — формулы не замедляют работу файла, так как все вычисления происходят при загрузке данных.
6. Интеграция с уведомлениями (VBA)
Для полностью автоматической системы можно настроить VBA-скрипт, который будет:
- 📧 Отправлять email при появлении просроченных товаров
- 🔔 Выводить всплывающее окно с предупреждением
- 📥 Экспортировать отчёт в PDF по расписанию
Пример кода для проверки просрочки (вставляйте в модуль ThisWorkbook):
Private Sub Workbook_Open()
Dim ws As Worksheet
Dim lastRow As Long, i As Long
Dim expiryDate As Date, daysLeft As Long
Dim warningMsg As String
Set ws = ThisWorkbook.Sheets("Склад") ' имя вашего листа
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow ' предполагаем, что заголовки в 1 строке
expiryDate = ws.Cells(i, 3).Value ' столбец с датой истечения
daysLeft = expiryDate - Date
If daysLeft < 0 Then
warningMsg = warningMsg & "Просрочен: " & ws.Cells(i, 1).Value & " (ячейка A" & i & ")" & vbCrLf
End If
Next i
If warningMsg <> "" Then
MsgBox "ВНИМАНИЕ! На складе просроченные товары:" & vbCrLf & warningMsg, vbCritical, "ПРОСРОЧКА"
End If
End Sub
⚠️ Внимание: Макросы работают только в файлах с расширением.xlsm. Перед использованием включите поддержку макросов вФайл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов.
7. Типичные ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при работе со сроками годности. Рассмотрим топ-5 проблем:
| Ошибка | Причина | Решение |
|---|---|---|
| Неправильный формат даты | Excel воспринимает дату как текст | Используйте ДАТАЗНАЧ() или форматируйте ячейку как Дата |
| Отрицательные дни | Формула не учитывает текущую дату | Добавьте ЕСЛИ(результат<0; "Просрочено"; результат) |
| Не обновляются данные | Формулы не пересчитываются | Нажмите F9 или проверьте настройки вычислений в Формулы → Параметры вычислений |
| Ошибка #ЗНАЧ! | Пустые ячейки в расчётах | Используйте ЕСЛИОШИБКА() или ЕПУСТО() |
| Некорректный срок в месяцах | ДАТАМЕС() не учитывает разную длину месяцев |
Замените на =ДАТА(ГОД(A2); МЕСЯЦ(A2)+B2; ДЕНЬ(A2)) |
Чтобы минимизировать ошибки:
- 🔄 Всегда тестируйте формулы на 2-3 примерах перед массовым применением
- 📊 Используйте
Проверку данных(вкладкаДанные) для ограничения ввода дат - 🔍 Регулярно проверяйте файлы на наличие
#ЗНАЧ!и#ДЕЛ/0!
FAQ: Частые вопросы по расчёту сроков годности
Как рассчитать срок годности, если он указан в виде "годен до конца месяца"?
Используйте функцию КОНМЕСЯЦА():
=КОНМЕСЯЦА(дата_производства; количество_месяцев)
Пример: для товара, годного 3 месяца с 15.05.2026, формула будет =КОНМЕСЯЦА(A2; 3), что вернёт 31.08.2026.
Можно ли автоматически отправлять email о просрочке?
Да, с помощью VBA и Outlook. Пример кода:
Sub SendExpiryEmail()
Dim OutApp As Object, OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = "sklad@company.ru"
.Subject = "Просроченные товары на складе"
.Body = "Список просроченных позиций прилагается." & vbCrLf & _
"Срочно принять меры!"
.Attachments.Add ThisWorkbook.FullName
.Send ' или .Display для ручной отправки
End With
End Sub
⚠️ Для работы этого кода должен быть установлен Microsoft Outlook.
Как учитывать рабочие и выходные дни при расчёте?
Используйте комбинацию функций ЧИСТРАБДНИ() и РАБДЕНЬ():
- Для подсчёта рабочих дней до истечения:
=ЧИСТРАБДНИ(СЕГОДНЯ(); дата_истечения) - Для расчёта даты истечения с учётом только рабочих дней:
=РАБДЕНЬ(дата_производства; срок_в_днях)
Чтобы исключить праздники, создайте диапазон с датами праздников и укажите его третьим аргументом:
=ЧИСТРАБДНИ(СЕГОДНЯ(); дата_истечения; Праздники!A2:A10)
Как сделать, чтобы срок годности автоматически обновлялся при изменении даты производства?
Используйте зависимые формулы и настройте автоматический пересчёт:
- Перейдите в
Формулы → Параметры вычислений → Автоматически - Убедитесь, что дата производства вводится как дата (не текст)
- Свяжите дату истечения с датой производства формулой (например,
=A2+30)
Если формулы не обновляются, нажмите F9 или Shift + F9 (пересчёт текущего листа).
Можно ли импортировать данные о сроках годности из 1С или другой программы?
Да, с помощью Power Query:
- Экспортируйте данные из 1С в
Excel,CSVилиXML - В Excel перейдите в
Данные → Получить данные → Из файлаи выберите источник - В Power Query преобразуйте данные (при необходимости измените формат дат)
- Добавьте столбец с расчётом срока годности (как описано в разделе 5)
- Загрузите данные в Excel и настройте автоматическое обновление
Для регулярного импорта используйте Параметры → Свойства связи → Обновлять каждые X минут.