Добрый день! Необходимо написать функцию для расчета суммы пропорционально дням в месяце, в котором помещение исключено их списков (если помещение выбыло в феврале считаем полный месяц (январь) + февраль пропорционально дням). Почему-то первые 2 месяца считает нормально, а в третьем месяце идут расхождения. Изначально данное ветвление было написано на Python и там все работает нормально. Ниже прилагаю код VBA.
[vba]
Код
Function NERASP(S As Double, DATA_START As Date, DAYS As Double, PNR As Double) As Double
If DATA_START = "01.01.2023" And DAYS <= 31 Then NERASP = Round(S * PNR / 31 * DAYS, 2) ElseIf DATA_START = "01.01.2023" And 32 <= DAYS <= 58 Then NERASP = Round(S * PNR + S * PNR / 28 * (DAYS - 31), 2) ElseIf DATA_START = "01.01.2023" And 59 <= DAYS <= 90 Then NERASP = S * PNR * 2 + S * PNR / 31 * (DAYS - 59) End If
End Function
[/vba]
Добрый день! Необходимо написать функцию для расчета суммы пропорционально дням в месяце, в котором помещение исключено их списков (если помещение выбыло в феврале считаем полный месяц (январь) + февраль пропорционально дням). Почему-то первые 2 месяца считает нормально, а в третьем месяце идут расхождения. Изначально данное ветвление было написано на Python и там все работает нормально. Ниже прилагаю код VBA.
[vba]
Код
Function NERASP(S As Double, DATA_START As Date, DAYS As Double, PNR As Double) As Double
If DATA_START = "01.01.2023" And DAYS <= 31 Then NERASP = Round(S * PNR / 31 * DAYS, 2) ElseIf DATA_START = "01.01.2023" And 32 <= DAYS <= 58 Then NERASP = Round(S * PNR + S * PNR / 28 * (DAYS - 31), 2) ElseIf DATA_START = "01.01.2023" And 59 <= DAYS <= 90 Then NERASP = S * PNR * 2 + S * PNR / 31 * (DAYS - 59) End If
Изначально данное ветвление было написано на Python и там все работает нормально
Excel не воспринимает такую конструкцию 32 <= DAYS <= 58, надо так 32 <= DAYS And DAYS <= 58 И в ручном расчёте для марта вычитается 59, а в коде 58, надо тоже 59
[vba]
Код
If DATA_START = "01.01.2023" And DAYS <= 31 Then NERASP = Round(S * PNR / 31 * DAYS, 2) ElseIf DATA_START = "01.01.2023" And 32 <= DAYS And DAYS <= 59 Then NERASP = Round(S * PNR + S * PNR / 28 * (DAYS - 31), 2) ElseIf DATA_START = "01.01.2023" And 60 <= DAYS And DAYS <= 90 Then NERASP = Round(S * PNR * 2 + S * PNR / 31 * (DAYS - 59), 2)
Изначально данное ветвление было написано на Python и там все работает нормально
Excel не воспринимает такую конструкцию 32 <= DAYS <= 58, надо так 32 <= DAYS And DAYS <= 58 И в ручном расчёте для марта вычитается 59, а в коде 58, надо тоже 59
[vba]
Код
If DATA_START = "01.01.2023" And DAYS <= 31 Then NERASP = Round(S * PNR / 31 * DAYS, 2) ElseIf DATA_START = "01.01.2023" And 32 <= DAYS And DAYS <= 59 Then NERASP = Round(S * PNR + S * PNR / 28 * (DAYS - 31), 2) ElseIf DATA_START = "01.01.2023" And 60 <= DAYS And DAYS <= 90 Then NERASP = Round(S * PNR * 2 + S * PNR / 31 * (DAYS - 59), 2)