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

Вход

Регистрация

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

 

= Мир MS Excel/расчет суммы пропорционально дням в месяце - Мир MS Excel

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

2016
Добрый день!
Необходимо написать функцию для расчета суммы пропорционально дням в месяце, в котором помещение исключено их списков (если помещение выбыло в феврале считаем полный месяц (январь) + февраль пропорционально дням). Почему-то первые 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]
К сообщению приложен файл: 6023355.png (181.1 Kb) · test1.xlsm (48.7 Kb)


Сообщение отредактировал Cyrus - Пятница, 09.06.2023, 09:31
 
Ответить
СообщениеДобрый день!
Необходимо написать функцию для расчета суммы пропорционально дням в месяце, в котором помещение исключено их списков (если помещение выбыло в феврале считаем полный месяц (январь) + февраль пропорционально дням). Почему-то первые 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]

Автор - Cyrus
Дата добавления - 08.06.2023 в 15:02
китин Дата: Четверг, 08.06.2023, 15:19 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 7014
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
Cyrus, оформите код тэгами( в Правилах написано как) и приложите файл пример. Это в Правилах тоже написано


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
СообщениеCyrus, оформите код тэгами( в Правилах написано как) и приложите файл пример. Это в Правилах тоже написано

Автор - китин
Дата добавления - 08.06.2023 в 15:19
Cyrus Дата: Пятница, 09.06.2023, 09:34 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

2016
китин, вроде поправил как надо, файл прикрепил.
 
Ответить
Сообщениекитин, вроде поправил как надо, файл прикрепил.

Автор - Cyrus
Дата добавления - 09.06.2023 в 09:34
Pelena Дата: Пятница, 09.06.2023, 10:35 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19174
Репутация: 4413 ±
Замечаний: ±

Excel 365 & Mac Excel
Изначально данное ветвление было написано на 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)
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
Изначально данное ветвление было написано на 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)
[/vba]

Автор - Pelena
Дата добавления - 09.06.2023 в 10:35
Cyrus Дата: Пятница, 09.06.2023, 12:51 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

2016
Pelena, вот же я кусочек глупости! Смотрел же видео, где об этом говорилось и забыл. Спасибо большое, Вы мне очень помогли.
 
Ответить
СообщениеPelena, вот же я кусочек глупости! Смотрел же видео, где об этом говорилось и забыл. Спасибо большое, Вы мне очень помогли.

Автор - Cyrus
Дата добавления - 09.06.2023 в 12:51
Мир MS Excel » Вопросы и решения » Вопросы по VBA » расчет суммы пропорционально дням в месяце (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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