Одна из наиболее часто выполняемых в мире бизнеса операций с датами является вычисление количества дней между двумя датами. В Excel можно решить данную задачу арифметическим вычитанием или с помощью функции РАЗНДАТ.

Как посчитать сколько осталось дней до даты?

Руководители проектов выполняют такие расчеты с целью определения на основе контрольных дат процента выполнения реализации проекта. В персональной деятельности такие операции служат для заполнения деклараций сотрудников, а в финансовых отделах для расчета амортизации.

Для решения данной задачи в Excel можно пойти двумя путями:

  1. Воспользоваться функцией РАЗНДАТ.
  2. Выполнить обычное вычитание старой даты от новой.



Ниже на рисунке схематически изображен пример отчета с использованием функции РАЗНДАТ и второй вариант с помощью обычного вычитания дат. В отчете необходимо посчитать сколько осталось дней от сегодняшнего дня до оплаты фактур:

Как показано на рисунке, в ячейке D4 находиться следующая формула:

В первой формуле используется функция РАЗНДАТ с кодом измерения времени – «d» (дни), в третьем аргументе функции. В результате вычисления формулы функция РАЗНДАТ возвращает количество дней в данном периоде. В значениях ячеек мы получили число дней, которое должно пройти от сегодняшней даты (ее возвращает функция СЕГОДНЯ) до сроков оплат, изначально указанных в столбце A (Дата оплаты).

Второй вариант формулы:

Во второй формуле мы делаем обычное вычитание дат. От указанной в столбце А (новой) отнимаем сегодняшнюю (старшую) дату. В итоге получаем тот же результат. Почему это работает? В Excel, как и во всех других программах входящий в пакет MS Office используется система нумерации дат под названием «система 1900». Каждая дата в Excel – это число пройденных дней от 01.01.1900г. Если в ячейке с датой поменять формат на «Общий» или «Числовой» то вместо даты будет отображается числовой код. Он является порядковым номером дня по состоянию на эту же дату. Поэтому при вычитании дат мы просто отнимаем от большего количества, меньшее и получаем тот же результат, который возвращает функция.

Предположим, что вы хотите добавить две недели к сроку, установленному в календарном плане проекта, и определить новую дату окончания, или выяснить по списку задач проекта, сколько времени потребуется для выполнения одной задачи. Можно сложить или вычесть дни, отталкиваясь от даты, с помощью простой формулы или использовать функции листа, предназначенные для работы с датами в Excel.

Сложение и вычитание дней из даты

Предположим, что на второй четверг каждого месяца выставляется счет. Вы хотите передать деньги на ваш платежный счет, чтобы эти деньги приступили к 15 дням за это время, поэтому вы получите от даты выполнения вычесть 15 дней. В приведенном ниже примере показано, как добавлять и вычитать даты с помощью ввода положительных и отрицательных чисел.

Введите даты выполнения в столбце A.

Введите количество дней, которые нужно сложить или вычесть в столбце B. Вы можете ввести отрицательное число для вычитания дней с даты начала и положительное число, которое нужно добавить к дате.

В ячейке C2 введите = a2 + b2и скопируйте вниз по мере необходимости.

Сложение и вычитание месяцев из даты с помощью функции ДАТАМЕС

Функцию ДАТАМЕС можно использовать для быстрого сложения и вычитания месяцев из даты.

Для функции ДАТАМЕС требуется два аргумента: Дата начала и количество месяцев, которые нужно сложить или вычесть. Чтобы вычесть месяцы, введите в качестве второго аргумента отрицательное число. Например, = ДАТАМЕС ("9/15/19";-5) возвращает 4 /15/19.

В этом примере вы можете вводить даты начала в столбце A.

Введите число месяцев, которые нужно сложить или вычесть в столбце B. Чтобы указать, следует ли вычитать месяц, можно ввести знак минус (-) перед числом (например,-1).

Введите = ДАТАМЕС (A2; B2) в ячейку C2 и скопируйте вниз по мере необходимости.

В зависимости от формата ячеек, содержащих введенные формулы, Excel может отображать результаты в виде порядковых номеров. Например, 8-Фев-2019 может отображаться как 43504.

В Excel даты хранятся в виде порядковых номеров, что позволяет использовать их в вычислениях. По умолчанию 1 января 1900 является порядковым числом 1, а 1 января 2010 — порядковым номером 40179, так как это 40 178 дней после 1 января 1900 г.

Если результаты отображаются как порядковые номера, выделите нужные ячейки и продолжите выполнение описанных ниже действий.

Нажмите клавиши CTRL + 1 , чтобы открыть диалоговое окно Формат ячеек , и откройте вкладку число .

В разделе Категориявыберите пункт Дата, выберите нужный формат даты и нажмите кнопку ОК. Значения в ячейках должны отобразиться как даты.

Сложение и вычитание лет из даты

В этом примере мы добавляем и прочесть годы из даты начала с помощью следующей формулы:

Принцип работы формулы:

Функция year проявляет дату в ячейке A2 и возвращает 2019. Затем он добавляет 3 года из ячейки B2, что приводит к 2022.

Функции Month и Day возвращают только исходные значения из ячейки a2, но они необходимы для использования функции Дата.

Наконец, функция Дата объединяет эти три значения в дату, состоящие из 3 лет в будущем — 02/08/22.

Сложение и вычитание сочетаний дней, месяцев и лет до и после даты

В этом примере мы добавляем и вычитая годы, месяцы и дни из даты начала с помощью следующей формулы:

= ДАТА (ГОД (A2) + B2; МЕСЯЦ (A2) + C2, ДЕНЬ (A2) + D2)

Принцип работы формулы:

Функция year проявляет дату в ячейке A2 и возвращает 2019. Затем он добавляет 1 год из ячейки B2, что приводит к 2020.

Функция Month возвращает 6, а затем добавляет к ней 7 из ячейки C2. Это будет интересно, поскольку 6 + 7 = 13, то есть 1 год и 1 месяц. В этом случае формула рассчитает, что и автоматически добавит еще один год к результату, что приведет к его отрезкой от 2020 до 2021.

Функция Day возвращает число 8, и к ней добавляется 15. Это будет работать аналогично части формулы, если вы выйдете на количество дней в заданном месяце.

Затем функция Дата объединяет эти три значения в дату, состоящие из 1 года, 7 месяцев и 15 дней в будущем — 01/23/21.

Ниже приведены некоторые способы использования формул и функций, которые используются для работы с датами, что позволяет найти влияние на календарный план проекта, если вы добавите две недели или время, необходимое для выполнения задачи.

Допустим, у вашей учетной записи есть 30-дневный цикл выставления счетов и хотите, чтобы деньги за 15 дней до даты выставления счетов 2013 марта были на месяц. Вот как это можно сделать с помощью формулы или функции для работы с датами.

В ячейке a1 введите 2/8/13.

В ячейке B1 введите =A1-15.

В ячейке C1 введите =A1+30.

В ячейке D1 введите =C1-15.

Добавление месяцев к дате

Мы будем использовать функцию ДАТАМЕС , и вам понадобятся Дата начала и количество месяцев, которые вы хотите добавить. Вот как добавить 16 месяцев в 10/24/13:

В ячейке a1 введите 10/24/13.

В ячейке B1 введите = ДАТАМЕС (a1; 16).

Чтобы отформатировать результаты как даты, выделите ячейку B1. Щелкните стрелку рядом с полем числовой формат> Краткая дата.

Вычитание месяцев из даты

Мы будем использовать одну и ту же функцию ДАТАМЕС для вычитания месяцев из даты.

Введите дату в ячейку a1 и ячейку B1 и введите формулу = ДАТАМЕС (4/15/2013,-5) .

Здесь мы указываем значение даты начала, введя дату, заключенную в кавычки.

Вы также можете просто обратиться к ячейке, содержащей значение даты, или с помощью формулы = ДАТАМЕС (a1,-5)для одного и того же результата.

Если Вам требуется рассчитать стаж (страховой) в годах, месяцах, днях, то, пожалуйста, воспользуйтесь расчетами выполненными в статье Расчет страхового (трудового) стажа в MS EXCEL.

Функции РАЗНДАТ( ) нет в справке EXCEL2007 и в Мастере функций (SHIFT+F3), но она работает, хотя и не без огрех.

Синтаксис функции:

РАЗНДАТ(начальная_дата; конечная_дата; способ_измерения)

Аргумент начальная_дата должна быть раньше аргумента конечная_дата.

Аргумент способ_измерения определяет, как и в каких единицах будет измеряться интервал между начальной и конечной датами. Этот аргумент может принимать следующие значения:

Значение

Описание

разница в полных месяцах

разница в полных годах

разница в полных месяцах без учета лет

разница в днях без учета месяцев и лет
ВНИМАНИЕ! Функция для некоторых версий EXCEL возвращает ошибочное значение, если день начальной даты больше дня конечной даты (например, в EXCEL 2007 при сравнении дат 28.02.2009 и 01.03.2009 результат будет 4 дня, а не 1 день). Избегайте использования функции с этим аргументом. Альтернативная формула приведена ниже.

разница в днях без учета лет
ВНИМАНИЕ! Функция для некоторых версий EXCEL возвращает ошибочное значение. Избегайте использования функции с этим аргументом.

Ниже приведено подробное описание всех 6 значений аргумента способ_измерения, а также альтернативных формул (функцию РАЗНДАТ() можно заменить другими формулами (правда достаточно громоздкими). Это сделано в файле примера ).

В файле примера значение аргумента начальная_дата помещена в ячейке А2, а значение аргумента конечная_дата – в ячейке В2.

1. Разница в днях ("d")

Формула =РАЗНДАТ(A2;B2;"d") вернет простую разницу в днях между двумя датами.

Пример1: начальная_дата 25.02.2007, конечная_дата 26.02.2007
Результат: 1 (день).

Этот пример показыват, что при подсчете стажа необходимо использовать функцию РАЗНДАТ() с осторожностью. Очевидно, что если сотрудник работал 25 и 26 февраля, то отработал он 2 дня, а не 1. То же относится и к расчету полных месяцев (см. ниже).

Пример2: начальная_дата 01.02.2007, конечная_дата 01.03.2007
Результат: 28 (дней)

Пример3: начальная_дата 28.02.2008, конечная_дата 01.03.2008
Результат: 2 (дня), т.к. 2008 год — високосный

Эта формула может быть заменена простым выражением =ЦЕЛОЕ(B2)-ЦЕЛОЕ(A2) . Функция ЦЕЛОЕ() округляет значение до меньшего целого и использована для того случая, если исходные даты введены вместе с временем суток ( РАЗНДАТ() игнорирует время, т.е. дробную часть числа, см. статью Как Excel хранит дату и время).

Примечание: Если интересуют только рабочие дни, то количество рабочих дней между двумя датами можно посчитать по формуле =ЧИСТРАБДНИ(B2;A2)

2. Разница в полных месяцах ("m")

Формула =РАЗНДАТ(A2;B2;"m") вернет количество полных месяцев между двумя датами.

Пример1: начальная_дата 01.02.2007, конечная_дата 01.03.2007
Результат: 1 (месяц)

Пример2: начальная_дата 01.03.2007, конечная_дата 31.03.2007
Результат: 0

При расчете стажа, считается, что сотрудник отработавший все дни месяца — отработал 1 полный месяц. Функция РАЗНДАТ() так не считает!

Пример3: начальная_дата 01.02.2007, конечная_дата 01.03.2009
Результат: 25 месяцев

Формула может быть заменена альтернативным выражением:
=12*(ГОД(B2)-ГОД(A2))-(МЕСЯЦ(A2)-МЕСЯЦ(B2))-(ДЕНЬ(B2)

Внимание: В справке MS EXCEL (см. раздел Вычисление возраста) имеется кривая формула для вычисления количества месяце между 2-мя датами:

Если вместо функции ТДАТА() — текущая дата использовать дату 31.10.1961, а в А3 ввести 01.11.1962, то формула вернет 13, хотя фактически прошло 12 месяцев и 1 день (ноябрь и декабрь в 1961г. + 10 месяцев в 1962г.).

3. Разница в полных годах ("y")

Формула =РАЗНДАТ(A2;B2;"y") вернет количество полных лет между двумя датами.

Пример1: начальная_дата 01.02.2007, конечная_дата 01.03.2009
Результат: 2 (года)

Пример2: начальная_дата 01.04.2007, конечная_дата 01.03.2009
Результат: 1 (год)

Подробнее читайте в статье Полный возраст или стаж.

Формула может быть заменена альтернативным выражением:
=ЕСЛИ(ДАТА(ГОД(B2);МЕСЯЦ(A2);ДЕНЬ(A2))

4. Разница в полных месяцах без учета лет ("ym")

Формула =РАЗНДАТ(A2;B2;"ym") вернет количество полных месяцев между двумя датами без учета лет (см. примеры ниже).

Пример1: начальная_дата 01.02.2007, конечная_дата 01.03.2009
Результат: 1 (месяц), т.к. сравниваются конечная дата 01.03.2009 и модифицированная начальная дата 01.02.2009 (год начальной даты заменяется годом конечной даты, т.к. 01.02 меньше чем 01.03)

Пример2: начальная_дата 01.04.2007, конечная_дата 01.03.2009
Результат: 11 (месяцев), т.к. сравниваются конечная дата 01.03.2009 и модифицированная начальная дата 01.04.2008 (год начальной даты заменяется годом конечной даты за вычетом 1 года , т.к. 01.04 больше чем 01.03)

Вся эта вакханалия нужна, например, для подсчета сколько полных дней, месяцев и лет прошло с определенной даты до сегодняшнего дня. Подробнее читайте в одноименной статье Сколько лет, месяцев, дней прошло с конкретной даты.

Формула может быть заменена альтернативным выражением:
=ОСТАТ(C7;12)
В ячейке С7 должна содержаться разница в полных месяцах (см. п.2).

5. Разница в днях без учета месяцев и лет ("md")

Формула =РАЗНДАТ(A2;B2;"md") вернет количество дней между двумя датами без учета месяцев и лет. Использовать функцию РАЗНДАТ() с этим аргументом не рекомендуется (см. примеры ниже).

Пример1: начальная_дата 01.02.2007, конечная_дата 06.03.2009
Результат1: 5 (дней), т.к. сравниваются конечная дата 06.03.2009 и модифицированная начальная дата 01.03.2009 (год и месяц начальной даты заменяется годом и месяцем конечной даты, т.к. 01 меньше чем 06)

Пример2: начальная_дата 28.02.2007, конечная_дата 28.03.2009
Результат2: 0, т.к. сравниваются конечная дата 28.03.2009 и модифицированная начальная дата 28.03.2009 (год и месяц начальной даты заменяется годом и месяцем конечной даты)

Пример3: начальная_дата 28.02.2009, конечная_дата 01.03.2009
Результат3: 4 (дня) — совершенно непонятный и НЕПРАВИЛЬНЫЙ результат. Ответ должен быть =1. Более того, результат вычисления зависит от версии EXCEL.

Версия EXCEL 2007 с SP3:

Результат – 143 дня! Больше чем дней в месяце!

Версия EXCEL 2007:

Разница между 28.02.2009 и 01.03.2009 – 4 дня!

Причем в EXCEL 2003 с SP3 формула возвращает верный результат 1 день. Для значений 31.12.2009 и 01.02.2010 результат вообще отрицательный (-2 дня)!

Не советую использовать формулу с вышеуказанным значением аргумента. Формула может быть заменена альтернативным выражением:
=ЕСЛИ(ДЕНЬ(A2)>ДЕНЬ(B2);
ДЕНЬ(КОНМЕСЯЦА(ДАТАМЕС(B2;-1);0))-ДЕНЬ(A2)+ДЕНЬ(B2);
ДЕНЬ(B2)-ДЕНЬ(A2))

Данная формула лишь эквивалетное (в большинстве случаев) выражение для РАЗНДАТ() с параметром md. О корректности этой формуле читайте в разделе "Еще раз о кривизне РАЗНДАТ()" ниже.

6. Разница в днях без учета лет ("yd")

Формула =РАЗНДАТ(A2;B2;"yd") вернет количество дней между двумя датами без учета лет. Использовать ее не рекомендуется по причинам, изложенным в предыдущем пункте.

Результат, возвращаемый формулой =РАЗНДАТ(A2;B2;"yd") зависит от версии EXCEL.

Формула может быть заменена альтернативным выражением:
=ЕСЛИ(ДАТА(ГОД(B2);МЕСЯЦ(A2);ДЕНЬ(A2))>B2;
B2-ДАТА(ГОД(B2)-1;МЕСЯЦ(A2);ДЕНЬ(A2));
B2-ДАТА(ГОД(B2);МЕСЯЦ(A2);ДЕНЬ(A2)))

Еще раз о кривизне РАЗНДАТ()

Найдем разницу дат 16.03.2015 и 30.01.15. Функция РАЗНДАТ() с параметрами md и ym подсчитает, что разница составляет 1 месяц и 14 дней. Так ли это на самом деле?

Имея формулу, эквивалентную РАЗНДАТ() , можно понять ход вычисления. Очевидно, что в нашем случае количество полных месяцев между датами = 1, т.е. весь февраль. Для вычисления дней, функция находит количество дней в предыдущем месяце относительно конечной даты, т.е. 28 (конечная дата принадлежит марту, предыдущий месяц — февраль, а в 2015г. в феврале было 28 дней). После этого отнимает день начала и прибавляет день конечной даты = ДЕНЬ(КОНМЕСЯЦА(ДАТАМЕС(B6;-1);0))-ДЕНЬ(A6)+ДЕНЬ(B6) , т.е. 28-30+16=14. На наш взгляд, между датами все же 1 полный месяц и все дни марта, т.е 16 дней, а не 14! Эта ошибка проявляется, когда в предыдущем месяце относительно конечной даты, дней меньше, чем дней начальной даты. Как выйти из этой ситуации?

Модифицируем формулу для расчета дней разницы без учета месяцев и лет:

При применении новой функции необходимо учитывать, что разница в днях будет одинаковой для нескольких начальных дат (см. рисунок выше, даты 28-31.01.2015). В остальных случаях формулы эквивалентны. Какую формулу применять? Это решать пользователю в зависимости от условия задачи.