Функция VBA возвращает #ЗНАЧ! при попытке сослаться на необязательный параметр

Я пытаюсь рассчитать NPV нескольких денежных потоков с непрерывным начислением процентов. Однако при попытке сослаться на необязательный параметр (который сигнализирует о том, что чистая приведенная стоимость будет непрерывно начисляться), я получаю #ЗНАЧ! вместо действительного NPV

Мой код VBA выглядит следующим образом:

Function myNPV(r As Double, CF As Range, Optional rate_type = 0)

Sum = 0
t = 0
For Each Cell In CF
    Sum = Sum + Cell.Value / (1 + r) ^ t
    t = t + 1
Next Cell

If rate_type = 1 Then
    Sum = Sum + Cell.Value / ((Exp(1)) ^ (r * t))
    t = t + 1
End If

myNPV = Sum

End Function

Первая из формул вычисляет непрерывную составную чистую стоимость, поэтому я ввел необязательный параметр для выбора между двумя параметрами.

При проверке моей формулы следующим образом: "=mynpv(C10, C3:C8, 1)" (C10 = discount rate, C3-C8 = Cash flows and 1 refering to the rate type) я просто получаю #Value!

Вы имеете в виду cell после того, как цикл for each cell закончился.

Rory 21.03.2022 22:03

Пожалуйста, поместите «Опция явно» в качестве первой строки в каждом из ваших модулей/классов/форм. Убедитесь, что вы выполнили «Debug.Compile Project», прежде чем пытаться запустить свой код. Вы также можете установить бесплатную и фантастическую надстройку Rubberduck для VBA и проверить проверки кода. Ваш код изобилует плохой практикой.

freeflow 21.03.2022 22:05
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
2
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что вы хотите включить оба в цикл, а затем использовать IF, чтобы решить, что делать:

Function myNPV(r As Double, CF As Range, Optional rate_type = 0)

Sum = 0
t = 0
For Each Cell In CF
    If rate_type = 0 Then
        Sum = Sum + Cell.Value / (1 + r) ^ t
    Else
        Sum = Sum + Cell.Value / ((Exp(1)) ^ (r * t))
    End If
    t = t + 1
Next Cell

myNPV = Sum

End Function

Другие вопросы по теме