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