Я пытаюсь рассчитать 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!
Пожалуйста, поместите «Опция явно» в качестве первой строки в каждом из ваших модулей/классов/форм. Убедитесь, что вы выполнили «Debug.Compile Project», прежде чем пытаться запустить свой код. Вы также можете установить бесплатную и фантастическую надстройку Rubberduck для VBA и проверить проверки кода. Ваш код изобилует плохой практикой.
Я считаю, что вы хотите включить оба в цикл, а затем использовать 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
Вы имеете в виду
cell
после того, как циклfor each cell
закончился.