Функция РАЗНДАТ() - Вычисление разности двух дат в днях, месяцах, годах в EXCEL

history

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


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

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

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

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

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

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

Значение

Описание

"d"

разница в днях

"m"

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

"y"

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

"ym"

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

"md"

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

"yd"

разница в днях без учета лет ВНИМАНИЕ! Функция для некоторых версий 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)<ДЕНЬ(A2))

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

=(ГОД(ТДАТА())-ГОД(A3))*12+МЕСЯЦ(ТДАТА())-МЕСЯЦ(A3)

Если вместо функции ТДАТА() - текущая дата использовать дату 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))<=B2; ГОД(B2)-ГОД(A2);ГОД(B2)-ГОД(A2)-1)

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! Эта ошибка проявляется, когда в предыдущем месяце относительно конечной даты, дней меньше, чем дней начальной даты. Как выйти из этой ситуации?

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

= ЕСЛИ(ДЕНЬ(A18)>ДЕНЬ(B18);ЕСЛИ((ДЕНЬ(КОНМЕСЯЦА(ДАТАМЕС(B18;-1);0))-ДЕНЬ(A18))<0;ДЕНЬ(B18);ДЕНЬ(КОНМЕСЯЦА(ДАТАМЕС(B18;-1);0))-ДЕНЬ(A18)+ДЕНЬ(B18));ДЕНЬ(B18)-ДЕНЬ(A18))

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


Комментарии

Только для авторизованных пользователей

Аноним, 20 октября 2015 г.
Спасибо
Аноним, 2 февраля 2016 г.
Отлично
Аноним, 28 апреля 2016 г.
Спасибо, очень помогли
Аноним, 18 мая 2016 г.
сейчас формула Разндат работает правильно.Проверено!!!
Михаил, 10 июля 2016 г.
Напишите версию EXCEL, пожалуйста
Аноним, 3 августа 2016 г.
Рекомендую формулу для вычисления разницы двух дат в формате лет/месяцев/дней A1 - 06.02.2014 B1 - =СЕГОДНЯ() =ЕСЛИ(РАЗНДАТ(B7;D7;"y");РАЗНДАТ(B7;D7;"y")&" "&ТЕКСТ(ОСТАТ(МАКС(ОСТАТ(РАЗНДАТ(B7;D7;"y")-11;100);9);10);"[<1]\го\д;[<4]\го\да;лет")&" ";)& ЕСЛИ(РАЗНДАТ(B7;D7;"ym");РАЗНДАТ(B7;D7;"ym")&" меся"&ТЕКСТ(ОСТАТ(РАЗНДАТ(B7;D7;"ym")-1; 11);"[<1]ц;[<4]ца;цев")&" ";)& ЕСЛИ(РАЗНДАТ(B7;D7;"md");РАЗНДАТ(B7;D7;"md")&" д"&ТЕКСТ(ОСТАТ(МАКС(ОСТАТ(РАЗНДАТ(B7;D7;"md")-11;100);9); 10);"[<1]ень;[<4]ня;ней");)
Аноним, 4 апреля 2017 г.
Вариант решения проблемы: 1) Вычисляем разницу в полных месяцах между начальной и конечной датой. 2) Находим промежуточную дату, отнимая от конечной даты количество полных месяцев из п.1 3) Находим разницу в днях между начальной и промежуточной датой. Реализация: А1 - Конечная дата B1 - Начальная дата =РАЗНДАТ(B1;ДАТАМЕС(A1;-(РАЗНДАТ(B1;A1;"m")));"d")
Аноним, 18 мая 2018 г.
А как теперь суммировать то что получилось по формуле разндат? Т.е. построчно я выяснила стаж, а как суммировать общий?
Михаил, 19 мая 2018 г.
Для расчета стажа используйте статью http://excel2.ru/articles/raschet-strahovogo-trudovogo-stazha-v-ms-excel
Аноним, 14 февраля 2019 г.
Хм, исходные данные одни, а в формуле другие ячейки
Аноним, 14 февраля 2019 г.
A1 и B1, а в формуле B7и D7
Аноним, 21 июня 2020 г.
Нафига копирование формул из текста выключили??? Функция РАЗНДАТ ваша личная интеллектуальная собственность, боитесь враги-конкуренты или, не дай бог, microsoft ваши "труды" уведут? ))) Сайт в черный список, ясен пень друзьям не посоветую!!!
Михаил, 22 июня 2020 г.
Здравствуйте, чувствую в Вашем посте боль и раздражение. Честно говоря, удивлен, т.к. тема EXCEL весьма далекая от эмоций тема - простая логика. Вопрос о невозможности копирования мне часто задают. Ответ простой - в формулах могут быть ошибки (как логические, так и синтаксические). Единственное место где их точно нет - это файл примера (ну, если только совсем иногда ))). Скачивайте файл и вставляйте в свои расчеты. А вот если Вам текст нужен, тогда вопрос к Вам: зачем? К слову: Мы студентам помогаем решать лабораторные, а не бездумно копировать в рефераты. А кому этот текст-то еще нужен? Неужели преподавателям?
Аноним, 3 июля 2020 г.
я кнопку "забанить" еще не сделал, но надо :)
Vic, 2 декабря 2020 г.
Автор не вдумываясь в причины и обстоятельства раскритиковал функцию взятую из Lotus 1-2-3 и встроиную исключительно для совместимости, что касается расчета стажа эта функция считает исключительно как в методичке по расчету прописано месяц 30 дней 12 месяцев не верите читайте методички и инструкции по расчету. Что касается заоблачного числа из скрина тут косяк с высокостными годами почему-то функция к разности дней по аргументу "md" добавляет число 114 и только если дата окончания в январе высокостного года обходное решение для дней =ЕСЛИ(РАЗНДАТ(А1;В2;"md")>30;РАЗНДАТ(А1;В2;"md")-114;РАЗНДАТ(А1;В2;"md")) для месяцев РАЗНДАТ(А1;В2;"ym"), для лет РАЗНДАТ(А1;В2;"y") дальше творческий полет мысли.
Михаил, 3 декабря 2020 г.
Спасибо за эмоциональное письмо. Уже давно не получал такие. 1)Согласен, что если в методичке прописан порядок расчета - нужно считать как в методичке. Была бы единая методичка для всех - было бы хорошо. Присылайте методички сюда https://vk.com/excel2ru 2)Сами же пишете, что есть косяк у функции, значит нельзя ей доверять. Недаром Microsoft ее не документирует. Как же после этого можно защищать функцию? 3) Если в методичке месяц принят за 30 дней, то зачем Вам РАЗНДАТ()? используйте стандартную ДНЕЙ360()
(только для авторизованных пользователей)

© Copyright 2013 - 2024 Excel2.ru. All Rights Reserved