Makro pro výpočet RPSN půjčky v Excelu

Jednoduché makro pro výpočet RPSN standardní půjčky – tj. jistina půjčena na začátku a poté anuitní splácení.

Funkce RPSN bere tři parametry: výše půjčky (jistiny), počet měsíců splácení, výše měsíční splátky. Funkce vrací RPSN v procentech.

Pokud jsou na začátku nějaké poplatky spojené s půjčkou, je třeba je odečíst od výše půjčky. Pokud jsou pravidelné měsíční poplatky spojené s půjčkou, je třeba přičíst je k výši měsíční splátky. S nepravidelnými poplatky si funkce neporadí.

Funkce hledá řešení metodou půlení intervalu s počátečním intervalem -100 % až 99 999 %, pokud výsledek spadá mimo tento interval, vypíše chybu. Výsledek v procentech spočte s přesností na 2 desetinná místa.

Nejprve pomocná funkce pro výpočet sumy zlomků ze vzorce RPSN – SUMA 1/(1+i)^(1..n/12)

Function SumaZlomku(RPSN, obdobi)
Dim i As Integer

For i = 1 To obdobi
SumaZlomku = SumaZlomku + 1 / (1 + RPSN) ^ (i / obdobi)
Next i
End Function

A nyní již samotná funkce pro výpočet RPSN:

Function RPSN(principal, per, pmt)
 I1 = -1
 I2 = 999
 Counter = 0

 Do
   OneHalf = I1 + (I2 - I1) / 2
   S = SumaZlomku(OneHalf, per) * pmt
   If S <= principal Then
      I2 = OneHalf
   Else
      I1 = OneHalf
   End If

   Counter = Counter + 1
   If Counter > 9999 Then
      GoTo ErrorCycling
   End If
 Loop While Abs(I1 - I2) > 0.00001

 RPSN = OneHalf
 Exit Function

 ErrorCycling:
   RPSN = "#PRILIS VYSOKE RPSN#"
 Exit Function

End Function

Podotýkám, že nejsem ve VBA příliš kovaný, takže je možné, že by šla funkce napsat lépe. Ale funguje, a to je nejdůležitější.

One thought on “Makro pro výpočet RPSN půjčky v Excelu”

  1. Vzorecek bohuzel nefunguje. Napr. nedava stejne vysledky jako kalkulacka na https://www.pujcka.co/vypocet-rpsn ani jako oficialni priklady na https://www.coi.cz/userdata/files/tiskove-zpravy/modelove-priklady-vypoctu-rpsn.pdf

    Pokusil jsem se to opravit a tady je vysledek (bez zaruky! ale uz aspon dava stejne vysledky jako ty kalkulacky)

    Function SumaZlomku(RPSN, obdobi, splatka)
    Dim i As Integer

    For i = 1 To obdobi
    SumaZlomku = SumaZlomku + splatka / (1 + RPSN) ^ (i / (12))
    Next i
    End Function

    Function RPSN(jistina, pocetSplatek, vyseSplatky)
    I1 = -1
    I2 = 999
    Counter = 0

    Do
    OneHalf = I1 + (I2 – I1) / 2
    S = SumaZlomku(OneHalf, pocetSplatek, vyseSplatky)
    If S 9999 Then
    GoTo ErrorCycling
    End If
    Loop While Abs(I1 – I2) > 0.00001

    RPSN = OneHalf
    Exit Function

    ErrorCycling:
    RPSN = „#PRILIS VYSOKE RPSN#“
    Exit Function

    End Function

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *