Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Разница между датами в днях. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Разница между датами в днях. (Макросы/Sub)
Разница между датами в днях.
Treider01 Дата: Среда, 05.11.2014, 18:16 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 1 ±
Замечаний: 0% ±

Excel 2003
Добрый вечер.

В названии темы почти вся задача, осложнена она тем что - в расчетном году должно быть 360 дней. Но и это ещё не всё. Количество дней в месяце меняется по разным правилам. Например:

Начальная дата: D1.M1.Y1 (день.месяц.год)
Конечная дата D2.M2.Y2 (день.месяц.год)

Разница между датами (Day count) = (Y2-Y1)*360+(M2-M1)*30+(D2-D1)

Правила корректировки D1 и D2 (вариант1):
если D1=31, то D1=30
если D2=31, то D2=30
если D1-последний день февраля, то D1=30
если D2-последний день февраля, то D2=30
Последний день февраля: 29 февраля в високосном году, 28 февраля в невисокосном году.

Правила корректировки D1 и D2 (вариант2):
если D1=31, то D1=30
если D2=31 и D1=31, то D2=30
если D1-последний день февраля, то D1=30
Если D1 и D2 выходят последними днями февраля то D2=30
Последний день февраля: 29 февраля в високосном году, 28 февраля в невисокосном году.

Я надеюсь без примера будет понятно.

Писать дополнительную функцию на определение последнего дня месяца - не надо, уже есть.
Фактически интересует возможность переноса данной формулы - (Y2-Y1)*360+(M2-M1)*30+(D2-D1) на vba с возможностью задавать условия по которым определяется кол-во дней в месяце.

Спасибо за внимание.
 
Ответить
СообщениеДобрый вечер.

В названии темы почти вся задача, осложнена она тем что - в расчетном году должно быть 360 дней. Но и это ещё не всё. Количество дней в месяце меняется по разным правилам. Например:

Начальная дата: D1.M1.Y1 (день.месяц.год)
Конечная дата D2.M2.Y2 (день.месяц.год)

Разница между датами (Day count) = (Y2-Y1)*360+(M2-M1)*30+(D2-D1)

Правила корректировки D1 и D2 (вариант1):
если D1=31, то D1=30
если D2=31, то D2=30
если D1-последний день февраля, то D1=30
если D2-последний день февраля, то D2=30
Последний день февраля: 29 февраля в високосном году, 28 февраля в невисокосном году.

Правила корректировки D1 и D2 (вариант2):
если D1=31, то D1=30
если D2=31 и D1=31, то D2=30
если D1-последний день февраля, то D1=30
Если D1 и D2 выходят последними днями февраля то D2=30
Последний день февраля: 29 февраля в високосном году, 28 февраля в невисокосном году.

Я надеюсь без примера будет понятно.

Писать дополнительную функцию на определение последнего дня месяца - не надо, уже есть.
Фактически интересует возможность переноса данной формулы - (Y2-Y1)*360+(M2-M1)*30+(D2-D1) на vba с возможностью задавать условия по которым определяется кол-во дней в месяце.

Спасибо за внимание.

Автор - Treider01
Дата добавления - 05.11.2014 в 18:16
Pelena Дата: Среда, 05.11.2014, 18:23 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19195
Репутация: 4423 ±
Замечаний: ±

Excel 365 & Mac Excel
без примера будет понятно

Это нарушение Правил форума. Пример нужен обязательно.

Функция ДНЕЙ360() разве не подходит?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
без примера будет понятно

Это нарушение Правил форума. Пример нужен обязательно.

Функция ДНЕЙ360() разве не подходит?

Автор - Pelena
Дата добавления - 05.11.2014 в 18:23
Treider01 Дата: Среда, 05.11.2014, 18:31 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 1 ±
Замечаний: 0% ±

Excel 2003
Это нарушение Правил форума. Пример нужен обязательно.

Функция ДНЕЙ360() разве не подходит?


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

У меня нет days360 в vba, и да я серьёзно говорю у меня его нет.

второй момент - не при всех условиях он считает коректно.

Если мне очень не изменяет память то в пером примере кол-во дней в году будет 362 а не 360
 
Ответить
Сообщение
Это нарушение Правил форума. Пример нужен обязательно.

Функция ДНЕЙ360() разве не подходит?


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

У меня нет days360 в vba, и да я серьёзно говорю у меня его нет.

второй момент - не при всех условиях он считает коректно.

Если мне очень не изменяет память то в пером примере кол-во дней в году будет 362 а не 360

Автор - Treider01
Дата добавления - 05.11.2014 в 18:31
MCH Дата: Среда, 05.11.2014, 18:33 | Сообщение № 4
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Вариант1
[vba]
Код
Function MyDays360(date1 As Date, date2 As Date) As Long
     Dim d1&, d2&
     If Day(date1 + 1) = 1 Then d1 = 30 Else d1 = Day(date1)
     If Day(date2 + 1) = 1 Then d2 = 30 Else d2 = Day(date2)
     MyDays360 = (Year(date2) - Year(date1)) * 360 + (Month(date2) - Month(date1)) * 30 + d2 - d1
End Function
[/vba]
 
Ответить
СообщениеВариант1
[vba]
Код
Function MyDays360(date1 As Date, date2 As Date) As Long
     Dim d1&, d2&
     If Day(date1 + 1) = 1 Then d1 = 30 Else d1 = Day(date1)
     If Day(date2 + 1) = 1 Then d2 = 30 Else d2 = Day(date2)
     MyDays360 = (Year(date2) - Year(date1)) * 360 + (Month(date2) - Month(date1)) * 30 + d2 - d1
End Function
[/vba]

Автор - MCH
Дата добавления - 05.11.2014 в 18:33
MCH Дата: Среда, 05.11.2014, 18:39 | Сообщение № 5
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Если мне очень не изменяет память то в пером примере кол-во дней в году будет 362 а не 360

прикольно:
=ДНЕЙ360("28.02.2014";"28.02.2014") = -2
=ДНЕЙ360("29.02.2008";"28.02.2009") = 358
=ДНЕЙ360("28.02.2011";"29.02.2012") = 359
 
Ответить
Сообщение
Если мне очень не изменяет память то в пером примере кол-во дней в году будет 362 а не 360

прикольно:
=ДНЕЙ360("28.02.2014";"28.02.2014") = -2
=ДНЕЙ360("29.02.2008";"28.02.2009") = 358
=ДНЕЙ360("28.02.2011";"29.02.2012") = 359

Автор - MCH
Дата добавления - 05.11.2014 в 18:39
Treider01 Дата: Среда, 05.11.2014, 18:49 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 1 ±
Замечаний: 0% ±

Excel 2003
MCH,

Спасибо!

А что прикольного то ?
 
Ответить
СообщениеMCH,

Спасибо!

А что прикольного то ?

Автор - Treider01
Дата добавления - 05.11.2014 в 18:49
MCH Дата: Среда, 05.11.2014, 18:54 | Сообщение № 7
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

А что прикольного то ?

не корректность функции, возвращение отрицательного числа при равных датах, а также дней меньше 360, при годовой разнице в датах
 
Ответить
Сообщение
А что прикольного то ?

не корректность функции, возвращение отрицательного числа при равных датах, а также дней меньше 360, при годовой разнице в датах

Автор - MCH
Дата добавления - 05.11.2014 в 18:54
Treider01 Дата: Среда, 05.11.2014, 19:01 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 1 ±
Замечаний: 0% ±

Excel 2003
не корректность функции, возвращение отрицательного числа при равных датах, а также дней меньше 360, при годовой разнице в датах


отрицательное число - ваш єксель, мой посчитал корректно.

Разные числа потому что считает по способу схожу с тем что написали вы и написал я у себя - у всех месяцев кроме ферваля 30 дней, а в феврале у него либо 28 либо 29 в связи с этим у меня очень большие сомнения, что наличие февраля в промежутке между двумя датами он обрабатывает корректно.
 
Ответить
Сообщение
не корректность функции, возвращение отрицательного числа при равных датах, а также дней меньше 360, при годовой разнице в датах


отрицательное число - ваш єксель, мой посчитал корректно.

Разные числа потому что считает по способу схожу с тем что написали вы и написал я у себя - у всех месяцев кроме ферваля 30 дней, а в феврале у него либо 28 либо 29 в связи с этим у меня очень большие сомнения, что наличие февраля в промежутке между двумя датами он обрабатывает корректно.

Автор - Treider01
Дата добавления - 05.11.2014 в 19:01
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Разница между датами в днях. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!