Введение: зачем считать дни в Excel и где это применяется
Расчёт количества дней между двумя датами — одна из самых востребованных операций в Microsoft Excel и Google Таблицах. На первый взгляд задача кажется простой: вычесть одну дату из другой. Но на практике пользователи сталкиваются с десятками нюансов: учёт выходных, исключение праздников, работа с временными метками, ошибки формата ячеек. Эта статья поможет разобраться во всех тонкостях — от элементарных формул до автоматизированных решений для сложных сценариев.
Где применяются такие вычисления? В бухгалтерии для расчёта просрочек по платежам, в логистике для определения сроков доставки, в HR-отделах при подсчёте отпускных дней или стажа сотрудников. Даже в личных финансах: например, чтобы узнать, сколько дней осталось до конца кредитного периода или до истечения срока действия скидки. Excel предлагает минимум 5 различных способов решить эту задачу — и мы разберём каждый из них с практическими примерами.
Способ 1: базовое вычитание дат (самый простой метод)
Если вам нужно просто узнать разницу между двумя датами в днях — без учёта выходных, праздников или времени — достаточно выполнить элементарное арифметическое действие. Excel хранит даты в виде последовательных чисел (начиная с 1 января 1900 года = 1), поэтому их можно вычитать как обычные значения.
Формула выглядит так:
=Конечная_дата - Начальная_дата
Пример: если в ячейке A1 указана дата начала проекта 15.05.2026, а в B1 — дата окончания 30.05.2026, то формула =B1-A1 вернёт результат 15 (дней). Важно: обе ячейки должны иметь формат "Дата", иначе Excel воспримет значения как текст и вернёт ошибку.
- ✅ Преимущества: максимальная простота, работает во всех версиях Excel.
- ⚠️ Ограничения: не учитывает выходные, праздники, рабочее время.
- 🔄 Альтернатива: функция
=ДАТАРАЗН()(о ней ниже).
⚠️ Внимание: Если результат отображается как дата (например,15.01.1900), а не число — измените формат ячейки с результатом на"Общий"или"Числовой".
Способ 2: функция ДАТАРАЗН() для гибких вычислений
Функция =ДАТАРАЗН(начальная_дата; конечная_дата; единица) позволяет рассчитывать разницу не только в днях ("d"), но и в месяцах ("m"), годах ("y") или комбинациях этих единиц. Это полезно, когда нужно, например, узнать полных лет между двумя датами или количество полных месяцев стажа.
Синтаксис:
=ДАТАРАЗН(A1; B1; "d")
=ДАТАРАЗН(A1; B1; "m")
=ДАТАРАЗН(A1; B1; "y")
| Единица измерения | Код в формуле | Пример результата для 15.05.2026 — 30.06.2026 |
|---|---|---|
| Дни | "d" |
46 |
| Месяцы | "m" |
1 (полных месяцев) |
| Годы | "y" |
0 |
| Дни без учёта годов | "yd" |
46 (аналогично "d") |
| Месяцы без учёта лет | "ym" |
1 |
Ключевое отличие от простого вычитания: функция ДАТАРАЗН игнорирует время в датах, тогда как операция =B1-A1 учитывает и часы с минутами, если они указаны. Это критично для временных меток типа 15.05.2026 14:30.
Убедитесь, что обе даты в формате "Дата"|Проверьте отсутствие текста в ячейках|Используйте кавычки для единиц измерения ("d", "m")|Для отрицательных дат поменяйте местами аргументы-->
Способ 3: учёт только рабочих дней (функция ЧИСТРАБДНИ)
Если вам нужно исключить выходные (субботу и воскресенье) из расчёта, используйте функцию =ЧИСТРАБДНИ(начальная_дата; конечная_дата; [праздники]). Она автоматически пропускает субботы и воскресенья, а также позволяет указать дополнительный список праздничных дней.
Пример: подсчёт рабочих дней между 01.06.2026 и 15.06.2026 с исключением 12.06.2026 (День России):
=ЧИСТРАБДНИ("01.06.2026"; "15.06.2026"; "12.06.2026")
- 📅 Нюанс 1: Праздники указываются как диапазон ячеек (например,
D1:D5) или перечислением в кавычках. - ⏳ Нюанс 2: Функция считает полные рабочие дни. Если начальная дата — воскресенье, оно не учитывается.
- 🔄 Альтернатива: Для учёта нестандартных выходных (например, пятница-суббота) потребуется функция
ЧИСТРАБДНИ.МЕЖД(см. следующий раздел).
⚠️ Внимание: В Google Таблицах функция называется=NETWORKDAYS, а неЧИСТРАБДНИ. Синтаксис аналогичен, но аргументы разделяются запятыми, а не точкой с запятой.
Как указать праздники из другого листа?
Создайте на отдельном листе (например, "Праздники") столбец с датами. Затем в основной формуле укажите диапазон как Праздники!A1:A10. Это позволит легко обновлять список праздников без правки всех формул.
Способ 4: нестандартные выходные и сложные календари
Если в вашей организации выходные дни отличаются от стандартных (например, пятница-суббота), используйте функцию =ЧИСТРАБДНИ.МЕЖД(начальная_дата; конечная_дата; выходной; [праздники]). Она позволяет задать произвольные выходные дни через числовой код:
1— суббота-воскресенье (стандарт)2— воскресенье-понедельник11— только воскресенье12— пятница-суббота13— суббота-пятница (для мусульманских стран)
Пример для выходных пятница-суббота:
=ЧИСТРАБДНИ.МЕЖД("01.06.2026"; "15.06.2026"; 12; D1:D3)
Для ещё более гибких календарей (например, сменный график) потребуется комбинация функций ЕСЛИ, ДЕНЬНЕД и массивов. В Excel 365 и 2021 доступны динамические массивы, которые упрощают такие вычисления без необходимости нажатия Ctrl+Shift+Enter.
Способ 5: расчёт дней с учётом времени (точные временные интервалы)
Если ваши даты содержат не только календарную дату, но и время (например, 15.05.2026 09:30), простое вычитание вернёт дробное число, где целая часть — дни, а дробная — доля суток. Чтобы преобразовать это в часы, минуты или секунды, используйте:
- 🕒 Часы:
=(B1-A1)*24 - ⏱️ Минуты:
=(B1-A1)*24*60 - ⏲️ Секунды:
=(B1-A1)*24*60*60
Пример: если в A1 указано 15.05.2026 09:00, а в B1 — 16.05.2026 17:30, то:
=B1-A1
=(B1-A1)*24
Для отображения результата в формате "ДД:ЧЧ:ММ" примените к ячейке пользовательский формат [ч]:мм:сс или д.м.гг ч:мм.
⚠️ Внимание: При работе с временными метками убедитесь, что в настройках Excel (Файл → Параметры → Дополнительно) включена опция"Использовать систему дат 1900". В противном случае возможны ошибки на 4 года.
Распространённые ошибки и как их избежать
Даже опытные пользователи Excel сталкиваются с ошибками при работе с датами. Вот самые частые из них и способы их решения:
| Ошибка | Причина | Решение |
|---|---|---|
#ЗНАЧ! |
Ячейка содержит текст вместо даты | Преобразуйте текст в дату с помощью =ДАТАЗНАЧ() или ТЕКСТ.В.ДАТУ() |
| Некорректный результат (например, 43125) | Ячейка с результатом имеет формат "Дата" | Измените формат на "Общий" или "Числовой" |
| Отрицательное число дней | Начальная дата позже конечной | Поменяйте местами аргументы или используйте =АБС(B1-A1) |
#ИМЯ? |
Опечатка в названии функции | Проверьте синтаксис (например, ЧИСТРАБДНИ, а не ЧИСЛОРАБДНЕЙ) |
Ещё одна типичная проблема — автоматическое преобразование дат при импорте данных. Например, дата 01.02.2026 может превратиться в 02.01.2026 из-за региональных настроек. Чтобы этого избежать, используйте:
- 📎 Формат текста: Предварительно отформатируйте столбец как
"Текст"перед вводом дат. - 🔢 Функции преобразования:
=ДАТАЗНАЧ("01.02.2026")или=ТЕКСТ.В.ДАТУ("01-02-2026"; "дд.мм.гггг").
Продвинутые техники: массивы, Power Query и VBA
Для сложных задач — например, расчёта рабочих дней с учётом сменного графика или динамического списка праздников — стандартных функций может быть недостаточно. В таких случаях поможет:
- 🔢 Формулы массива: Комбинация
ЕСЛИ,ДЕНЬНЕДиСУММдля кастомизированных правил. Пример:
Внимание: В старых версиях Excel требует ввода через=СУММ(--(ДЕНЬНЕД(СТРОКА(НЕПРЯМ($A$1:$A$30))-1;2)<6);--(СТРОКА(НЕПРЯМ($A$1:$A$30))-1>=$A$1);--(СТРОКА(НЕПРЯМ($A$1:$A$30))-1<=$B$1))Ctrl+Shift+Enter. - 📊 Power Query: Инструмент для импорта и трансформации данных. Позволяет создать столбец с разницей дат и применить сложные фильтры (например, исключить даты из другой таблицы).
- 🤖 VBA: Скрипты для автоматизации. Пример кода для подсчёта рабочих дней с учётом индивидуального графика:
Function CustomWorkDays(startDate As Date, endDate As Date, Optional holidays As Range) As LongDim dayCount As Long, i As Long
dayCount = 0
For i = startDate To endDate
If Weekday(i, vbMonday) < 6 Then
If Not IsHoliday(i, holidays) Then dayCount = dayCount + 1
End If
Next i
CustomWorkDays = dayCount
End Function
Function IsHoliday(checkDate As Date, holidays As Range) As Boolean
Dim cell As Range
If holidays Is Nothing Then Exit Function
For Each cell In holidays
If cell.Value = checkDate Then
IsHoliday = True
Exit Function
End If
Next cell
End Function
Эти методы требуют более глубоких знаний, но дают неограниченные возможности для адаптации под специфические бизнес-задачи. Например, в Power Query можно создать календарь с пометками о сокращённых днях или ночных сменах, а затем использовать его для расчётов.
Как запустить VBA в Excel?
1. Нажмите Alt + F11 для открытия редактора VBA.
2. Вставьте код в модуль (Insert → Module).
3. Вернитесь в Excel и запустите макрос через Разработчик → Макросы (или Alt + F8).
4. Используйте функцию в ячейке как обычно: =CustomWorkDays(A1; B1; D1:D10).
FAQ: ответы на частые вопросы
Можно ли посчитать дни между датами в Google Таблицах?
Да, все описанные функции работают и в Google Таблицах, но с двумя нюансами:
- Разделитель аргументов — запятая (
,), а не точка с запятой (;). - Названия функций на английском:
=DATEDIF,=NETWORKDAYS,=WORKDAY.INTL.
Пример: =NETWORKDAYS(A1, B1, D1:D5).
Как исключить из расчёта конкретные дни недели (например, среду)?
Используйте комбинацию функций ДЕНЬНЕД и СУММПРОИЗВ:
=СУММПРОИЗВ(--(ДЕНЬНЕД(СТРОКА(НЕПРЯМ($A$1:INDEX($A:$A; $B$1-$A$1+1)))-1)<>4))
Здесь 4 — код среды (в системе, где понедельник = 1). Для других дней измените число.
Почему функция ДАТАРАЗН возвращает ошибку #ЧИСЛО!?
Ошибка возникает в трёх случаях:
- Начальная дата позже конечной (используйте
=АБС(ДАТАРАЗН(...))). - Один из аргументов не является датой (проверьте формат ячеек).
- Неправильный код единицы измерения (допустимы только
"d","m","y"и их комбинации).
Как посчитать количество полных недель между датами?
Используйте формулу:
=ЦЕЛОЕ((B1-A1)/7)
Для учёта только полных недель (например, с понедельника по воскресенье) добавьте корректировку:
=ЦЕЛОЕ((B1-A1-ДЕНЬНЕД(A1;2)+1)/7)
Можно ли автоматически обновлять список праздников?
Да, с помощью Power Query или VBA:
- 🔄 Power Query: Подключитесь к внешнему источнику (например, государственному календарю праздников) и обновите данные по расписанию.
- 🤖 VBA: Напишите скрипт, который будет парсить праздники с сайта и записывать их в заданный диапазон.
Пример VBA для загрузки праздников с Google Calendar API:
' Требуется подключить библиотеку Microsoft XML, v6.0
Sub LoadHolidays()
Dim http As New MSXML2.XMLHTTP60
Dim url As String, response As String
url = "https://www.googleapis.com/calendar/v3/calendars/ru.russian%23holiday@group.v.calendar.google.com/events?key=YOUR_API_KEY"
http.Open "GET", url, False
http.Send
response = http.responseText
' Далее парсинг JSON и запись дат в лист
End Sub