В названии темы почти вся задача, осложнена она тем что - в расчетном году должно быть 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 с возможностью задавать условия по которым определяется кол-во дней в месяце.
Это нарушение Правил форума. Пример нужен обязательно.
Функция ДНЕЙ360() разве не подходит?
В правилах написано, что пример обязателен лишь тогда когда касается конкретного случая, помоему этот случай не конкретный и дополнительной подгонки значений тоже не требует.
У меня нет days360 в vba, и да я серьёзно говорю у меня его нет.
второй момент - не при всех условиях он считает коректно.
Если мне очень не изменяет память то в пером примере кол-во дней в году будет 362 а не 360
Это нарушение Правил форума. Пример нужен обязательно.
Функция ДНЕЙ360() разве не подходит?
В правилах написано, что пример обязателен лишь тогда когда касается конкретного случая, помоему этот случай не конкретный и дополнительной подгонки значений тоже не требует.
У меня нет days360 в vba, и да я серьёзно говорю у меня его нет.
второй момент - не при всех условиях он считает коректно.
Если мне очень не изменяет память то в пером примере кол-во дней в году будет 362 а не 360Treider01
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
не корректность функции, возвращение отрицательного числа при равных датах, а также дней меньше 360, при годовой разнице в датах
отрицательное число - ваш єксель, мой посчитал корректно.
Разные числа потому что считает по способу схожу с тем что написали вы и написал я у себя - у всех месяцев кроме ферваля 30 дней, а в феврале у него либо 28 либо 29 в связи с этим у меня очень большие сомнения, что наличие февраля в промежутке между двумя датами он обрабатывает корректно.
не корректность функции, возвращение отрицательного числа при равных датах, а также дней меньше 360, при годовой разнице в датах
отрицательное число - ваш єксель, мой посчитал корректно.
Разные числа потому что считает по способу схожу с тем что написали вы и написал я у себя - у всех месяцев кроме ферваля 30 дней, а в феврале у него либо 28 либо 29 в связи с этим у меня очень большие сомнения, что наличие февраля в промежутке между двумя датами он обрабатывает корректно.Treider01