Почему Excel «не видит» ваши даты и как это исправить
Вы когда-нибудь пытались вычесть одну дату из другой в Microsoft Excel, но вместо ожидаемого количества дней получали странное число вроде 45689? Это не ошибка программы — так Excel хранит даты внутренне. С 1 января 1900 года (в Windows) или 1904 года (в Mac) каждая дата преобразуется в порядковый номер дня. Например, 1 января 2026 — это 45292 в системе Windows.
Знание этого принципа решает 90% проблем с вычислением дней. Но есть нюансы: если ячейка отформатирована как текст, Excel не распознаёт её как дату, даже если там написано 15.05.2026. Или если вы вводите дату через точку (15.05.2026), а в настройках системы разделитель — запятая. В таких случаях формулы вроде =B2-A2 вернут ошибку #ЗНАЧ!.
В этой статье мы разберём не только базовые способы подсчёта дней, но и уникальные приёмы для работы с рабочими/выходными днями, возрастом в годах/месяцах и даже учётом праздников. Вы узнаете, как обойти «подводные камни» форматирования и почему иногда простая разница между датами даёт неверный результат.
Способ 1: Простое вычитание дат (базовый метод)
Самый очевидный способ — вычесть одну дату из другой. Если в ячейке A1 у вас 01.01.2026, а в B1 — 10.01.2026, формула =B1-A1 вернёт 9. Но здесь есть 3 ключевых момента:
- 📅 Формат ячеек: обе даты должны быть в формате
Дата(проверьте вГлавная → Формат → Формат ячеек). Если видите выравнивание по левому краю — это текст, а не дата. - ⚠️ Отрицательные значения: если первая дата позже второй, результат будет отрицательным (например,
=A1-B1даст-9). - 🔄 Время в датах: если в ячейках есть время (например,
01.01.2026 15:30), Excel учтёт и его. Чтобы игнорировать время, используйте=ЦЕЛОЕ(B1-A1).
Пример с учётом времени:
=ЦЕЛОЕ(B1-A1) // Вернёт только целые дни, игнорируя часы
⚠️ Внимание: Если после вычитания вы видите число вроде45689вместо дней, измените формат результата наОбщийилиЧисловой.
Способ 2: Функция ДАТАРАЗН (DATEDIF) — скрытая мощь Excel
Функция ДАТАРАЗН (или DATEDIF в английской версии) — это «секретное оружие» для работы с датами. Она не отображается в мастер-функций, но работает во всех версиях Excel. Синтаксис:
=ДАТАРАЗН(начальная_дата; конечная_дата; единица_измерения)
Аргумент единица_измерения определяет, что вычислять:
- "D" — полные дни между датами (
=ДАТАРАЗН(A1;B1;"D")). - "M" — полные месяцы (
=ДАТАРАЗН(A1;B1;"M")). - "Y" — полные годы (
=ДАТАРАЗН(A1;B1;"Y")). - "YM" — месяцы без учёта лет (
=ДАТАРАЗН(A1;B1;"YM")). - "MD" — дни без учёта месяцев и лет (
=ДАТАРАЗН(A1;B1;"MD")).
Пример: чтобы узнать, сколько лет, месяцев и дней человеку на текущую дату, используйте:
=ДАТАРАЗН(A1;СЕГОДНЯ();"Y") & " лет, " & ДАТАРАЗН(A1;СЕГОДНЯ();"YM") & " мес., " & ДАТАРАЗН(A1;СЕГОДНЯ();"MD") & " дн."
| Формула | Пример | Результат (для дат 01.01.2020 и 15.03.2026) |
|---|---|---|
=ДАТАРАЗН(A1;B1;"D") |
Полные дни | 1556 |
=ДАТАРАЗН(A1;B1;"M") |
Полные месяцы | 50 |
=ДАТАРАЗН(A1;B1;"Y") |
Полные годы | 4 |
=ДАТАРАЗН(A1;B1;"YM") |
Месяцы без лет | 2 |
=ДАТАРАЗН(A1;B1;"MD") |
Дни без месяцев и лет | 14 |
Способ 3: Функция РАЗНДАТ (DAYS) — альтернатива для новых версий
В Excel 2013 и новее появилась функция РАЗНДАТ (DAYS), которая упрощает подсчёт дней между двумя датами. Её синтаксис:
=РАЗНДАТ(конечная_дата; начальная_дата)
Особенности:
- 🔹 Всегда возвращает положительное число (автоматически меняет даты местами, если первая позже второй).
- 📊 Работает с массивами: если передать диапазон ячеек, вернёт массив результатов.
- ❌ Не учитывает время (в отличие от простого вычитания).
Пример с массивом: если в A1:A3 даты начала проектов, а в B1:B3 — даты окончания, формула =РАЗНДАТ(B1:B3;A1:A3) вернёт длительность каждого проекта в днях.
⚠️ Внимание: ФункцияРАЗНДАТигнорирует формат ячеек. Если в ячейке текст, который выглядит как дата (например,"01.01.2026"), функция вернёт ошибку#ЗНАЧ!. Используйте=ДАТАЗНАЧ(A1), чтобы преобразовать текст в дату.
Способ 4: Подсчёт рабочих дней (исключая выходные)
Если вам нужно посчитать только рабочие дни (с понедельника по пятницу), используйте функцию ЧИСТРАБДНИ (NETWORKDAYS):
=ЧИСТРАБДНИ(начальная_дата; конечная_дата; [праздники])
Необязательный аргумент [праздники] — это диапазон ячеек с датами праздников, которые тоже нужно исключить. Например:
- 📅 В
A1:01.01.2026(начало периода). - 📅 В
B1:31.01.2026(конец периода). - 🎉 В
D1:D3: даты праздников (07.01.2026,08.01.2026).
Формула вернёт количество рабочих дней за январь 2026 года без учёта новогодних каникул:
=ЧИСТРАБДНИ(A1; B1; D1:D3)
Убедитесь, что все даты в формате Дата|Проверьте диапазон праздников на наличие пустых ячеек|Используйте абсолютные ссылки для диапазона праздников (например, $D$1:$D$3)|Сравните результат с календарём для точности-->
Для подсчёта рабочих дней между текущей датой и другой датой используйте:
=ЧИСТРАБДНИ(СЕГОДНЯ(); B1)
Способ 5: Определение дня недели и условный подсчёт
Иногда нужно посчитать дни конкретного типа — например, только понедельники или выходные. Для этого комбинируйте функции ДЕНЬНЕД (WEEKDAY) и ЕСЛИ.
Функция ДЕНЬНЕД возвращает номер дня недели (от 1 до 7), где:
1— воскресенье (в настройках Windows).2— понедельник.- ...
7— суббота.
Пример: подсчёт количества пятниц между двумя датами. Создайте столбец с датами (например, A1:A30) и используйте:
=СУММПРОИЗВ(--(ДЕНЬНЕД(A1:A30)=6))
Здесь 6 — код пятницы (в зависимости от настроек Excel).
Как изменить нумерацию дней недели?
По умолчанию в Windows 1 = воскресенье, но это можно поменять. В функции ДЕНЬНЕД есть второй аргумент — тип_возврата:
- 1 или опущен — 1=воскресенье, 7=суббота.
- 2 — 1=понедельник, 7=воскресенье.
- 3 — 0=понедельник, 6=воскресенье.
Пример: =ДЕНЬНЕД(A1;2) вернёт 1 для понедельника.
Для подсчёта выходных дней (суббот и воскресений) между двумя датами:
=ЧИСЛКОМБ(ДАТА(ГОД(A1);МЕСЯЦ(A1);1):B1)-ЧИСТРАБДНИ(A1;B1)
Эта формула считает все дни в периоде и вычитает рабочие дни.
Способ 6: Учёт праздников и производственного календаря
Функция ЧИСТРАБДНИ.МЕЖД (NETWORKDAYS.INTL) позволяет настраивать, какие дни считать выходными. Например, если у вас рабочая суббота, но выходной — пятница и воскресенье.
Синтаксис:
=ЧИСТРАБДНИ.МЕЖД(начальная_дата; конечная_дата; [выходные]; [праздники])
Аргумент [выходные] — это строка или число, указывающее, какие дни недели являются выходными. Примеры:
- "0000011" — выходные суббота и воскресенье (стандарт).
- "0000001" — выходной только воскресенье.
- "0000101" — выходные пятница и воскресенье.
11— выходные суббота и воскресенье (числовой формат).
Пример: подсчёт рабочих дней для мусульманской рабочей недели (выходные — пятница и суббота):
=ЧИСТРАБДНИ.МЕЖД(A1; B1; "0000110"; D1:D5)
⚠️ Внимание: Если вы используете числовой формат для аргумента[выходные], помните, что1соответствует понедельнику, а7— воскресенью. Например,17означает, что выходные — понедельник и воскресенье (1+16).
Способ 7: Динамический подсчёт дней до события
Чтобы создать обратный отсчёт до конкретной даты (например, до Нового года или дедлайна проекта), используйте комбинацию функций СЕГОДНЯ и РАЗНДАТ:
=РАЗНДАТ(целевая_дата; СЕГОДНЯ())
Примеры:
- 🎄 До Нового года:
=РАЗНДАТ(ДАТА(ГОД(СЕГОДНЯ())+1;1;1); СЕГОДНЯ()). - 📅 До конца месяца:
=РАЗНДАТ(ДАТА(ГОД(СЕГОДНЯ());МЕСЯЦ(СЕГОДНЯ())+1;1); СЕГОДНЯ()). - 🎂 До дня рождения:
=РАЗНДАТ(ДАТА(ГОД(СЕГОДНЯ());5;15); СЕГОДНЯ())(для 15 мая).
Чтобы отобразить результат в виде текста (например, "Осталось 15 дней"), используйте:
="Осталось " & РАЗНДАТ(целевая_дата; СЕГОДНЯ()) & " дней"
Частые ошибки и как их избежать
Даже опытные пользователи Excel сталкиваются с проблемами при работе с датами. Вот TOP-5 ошибок и их решения:
- #ЗНАЧ! при вычитании дат
Причина: одна или обе даты хранятся как текст. Решение: используйте
=ДАТАЗНАЧ(A1)для преобразования или измените формат ячейки наДата. - Неправильный подсчёт рабочих дней
Причина: не учтены праздники или неправильно указаны выходные. Решение: проверьте диапазон праздников и формат аргумента
[выходные]вЧИСТРАБДНИ.МЕЖД. - Отрицательное количество дней
Причина: первая дата позже второй. Решение: используйте
=АБС(B1-A1)для абсолютного значения или поменяйте даты местами. - Неверный день недели
Причина: в настройках системы первый день недели — воскресенье, а вы ожидаете понедельник. Решение: используйте второй аргумент в
ДЕНЬНЕД, например=ДЕНЬНЕД(A1;2). - Функция ДАТАРАЗН не работает
Причина: опечатка в аргументе
единица_измерения(должен быть верхний регистр). Решение: проверьте регистр букв (например, "D", а не "d").
Если вы работаете с Google Sheets, учтите, что там:
- 🔹 Функция
DATEDIFработает, но не отображается в списке. - 🔹 Для подсчёта рабочих дней используйте
=NETWORKDAYS(аналогЧИСТРАБДНИ). - 🔹 Формат дат по умолчанию может отличаться (например,
ММ/ДД/ГГГГвместоДД.ММ.ГГГГ).
FAQ: Ответы на популярные вопросы
Как посчитать количество дней между датами, если одна из них в другом листе?
Используйте ссылку на лист в формуле. Например, если начальная дата в ячейке A1 на Лист1, а конечная — в B1 на Лист2, формула будет:
=Лист2!B1-Лист1!A1
Убедитесь, что оба листа открыты, иначе Excel может не обновить результат.
Почему функция ДАТАРАЗН возвращает ошибку #ЧИСЛО?
Ошибка #ЧИСЛО! возникает, если:
- Начальная дата позже конечной (для аргументов "Y", "M", "D").
- Вы используете неверный аргумент
единица_измерения(например, "X" вместо "D").
Решение: проверьте порядок дат и правильность аргумента.
Как посчитать дни с учётом полурабочих дней (например, суббота — короткий день)?
Excel не имеет встроенной функции для полурабочих дней, но можно использовать обходной путь:
- Подсчитайте все рабочие дни функцией
ЧИСТРАБДНИ.МЕЖД. - Подсчитайте количество суббот (или других полурабочих дней) с помощью
ДЕНЬНЕД. - Добавьте к результату половину от количества суббот.
Пример:
=ЧИСТРАБДНИ.МЕЖД(A1;B1;"0000010") + СУММПРОИЗВ(--(ДЕНЬНЕД(СТРОКА(ДВССЫЛ(A1:B1)))=7))/2
Можно ли посчитать дни между датами в Power Query?
Да, в Power Query (вкладка Данные → Получение данных) вы можете:
- Загрузить таблицу с датами.
- Добавить пользовательский столбец с формулой
= [КонечнаяДата] - [НачальнаяДата]. - Изменить тип данных нового столбца на
Целое число.
Преимущество: Power Query автоматически обрабатывает ошибки формата дат.
Как вычесть из даты фиксированное количество дней?
Просто добавьте или вычтите число из ячейки с датой. Например, чтобы получить дату на 10 дней раньше:
=A1-10
Excel автоматически скорректирует месяц/год, если вычитание затрагивает переход через границу месяца. Например, 05.01.2026 - 10 даст 26.12.2023.