Function dyskont(rate As Single, rate_SD As Single, time As Byte

Transkrypt

Function dyskont(rate As Single, rate_SD As Single, time As Byte
Function dyskont(rate As Single, rate_SD As Single, time As Byte) As Single
'Funkcja zwraca wartość czynnika dyskontującego dla stopy i czasu
'((1+r)^n)
rate2 = Application.WorksheetFunction.Norm_Inv(Rnd, rate, rate_SD)
dyskont = (1 + rate2) ^ time
End Function
Function wzrost(grow As Single, grow_SD As Single) As Single
'Funkcja zwraca symulowaną stopę wzrostu CF
'(1+g)
wzrost = 1 + Application.WorksheetFunction.Norm_Inv(Rnd, grow, grow_SD)
End Function
Sub symulacja()
'Deklaracja zmiennych
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
inwestycja As Single
CF As Single
grow As Single
grow_SD As Single
rate As Single
rate_SD As Single
NPV As Single
N As Byte
time As Byte
symulacja As Long
SIM As Long
'Przypisanie zmiennym wartości
inwestycja = Range("I").Value
CF = Range("CF").Value
grow = Range("g").Value
grow_SD = Range("g_SD").Value
rate = Range("rate").Value
rate_SD = Range("rate_SD").Value
N = Range("N").Value
SIM = Range("liczba_symulacji").Value
Range("nr_symulacji") = Empty
'wyzerowanie obszaru
Range("dane_npv") = Empty
'wyzerowanie obszaru
Range("dane_NPV_round") = Empty
'wyzerowanie obszaru
'pętla symulacji - wykona się SIM-razy
For symulacja = 1 To SIM
NPV = 0
'wyzerowanie zmiennej
CF = Range("CF").Value
'początkowy CF
NPV = -1 * inwestycja
'inwestycja n=0
NPV = NPV + (CF / dyskont(rate, rate_SD, 1))'pierwszy rok n=1
For time = 2 To N
'następne lata
CF = CF * wzrost(grow, grow_SD)
NPV = NPV + (CF / dyskont(rate, rate_SD, time))
Next time
Range("nr_symulacji").Cells(symulacja) = symulacja
Range("dane_npv").Cells(symulacja) = NPV
Range("dane_NPV_round").Cells(symulacja) = _
Application.WorksheetFunction.Round(NPV,0)
Next symulacja
'wzrost(grow,grow_SD)
'dyskont(rate, rate_SD, 1)
End Sub

Podobne dokumenty