Funzioni Finanziarie : Finanziamenti , Prestiti & Ammortamenti - pagina vista: volte

Premesso che nel settore finanziario c'ho sempre trafficato poco o niente, un ultimo lavoro presentato da Gianni Fagnani, sezione "Lavori dei lettori", programma "Finanziamenti.zip", mi ha fatto rispolverare un mio vecchio lavoro realizzato in VB, basato su Funzioni Finanziarie presenti anche in vba.

La maggior parte delle Funzioni Finanziarie per i Finanziamenti o Prestiti accettano gli stessi argomenti, i più comuni li  vediamo nella tabella sotto con relativa spiegazione, e nella successiva, vediamo quelli per gli Ammortamenti:

Argomento

obbligatorio

Descrizione

val_futuro

no

valore dell'investimento o prestito alla fine del periodo (0 se omesso)

val1, val2,....valn

si/no

flussi di cassa periodici, quando i singoli importi sono diversi (l'obbligatorietà dipende dalla Funzione utilizzata)

periodi

si

durata dell'investimento o prestito espresso in mesi o anni

pagam

si

rata periodica a importi uguali

tipo

no

momento in cui si effettua il pagamento: 0 alla fine di ogni periodo (o se omesso); 1 all'inizio del periodo

periodo

si

numero dei singoli pagamenti o rate

val_attuale

si

valore attuale dell'investimento o importo del prestito

tasso_int

si

tasso di sconto o tasso di interesse

per gli Ammortamenti:

Argomento obbligatorio Descrizione

costo

si

costo iniziale di un bene

vita_utile

si

periodo di tempo durante il quale il bene viene ammortizzato

val_residuo

si

valore di recupero del bene dopo che è stato completamente ammortizzato

durata

si

periodo di tempo da considerare nel calcolo


Le Funzioni Finanziarie sono comunque ben spiegate nella guida in linea, quindi non le esaminiamo tutte, ma solo alcune, tralasciando completamente le Funzioni per gli investimenti.

Una cosa che mi ha sempre incuriosito quando sento parlare di "prestiti o finanziamenti" è : quale tasso di interesse è stato applicato realmente dal concedente il finanziamento o prestito ?

In una epoca in cui la pubblicità del "Compra oggi, paghi domani" ti assilla e ti può spingere ad accendere mutui, prestiti o finanziamenti, non sarebbe opportuno avere uno strumento che ci consenta di stabilire, posto la cifra iniziale oggetto del prestito, e conoscendo il numero di rate e l'importo della rata, stabilire il tasso di interesse che ci è stato effettivamente applicato?

Visto che non è difficile comunque, tutto sommato, capire gli argomenti ed impostarli nei valori, mi permetto di suggerire alcune Funzioni e relativi passaggi in vba. La prima funzione che esaminiamo è la Funzione Rate() per un prestito sulla base di pagamenti e di un tasso di interesse costanti (che è diversa e da non confondere con la funzione RATA() del foglio di lavoro). Questa funzione restituisce un valore Double che specifica il tasso di interesse per periodo di una rendita annua. E' la funzione che ci serve per sapere l'effettivo tasso applicato ad un finanziamento o prestito. La sua sorella per il foglio di lavoro è la Funzione TASSO(). La sua sintassi (esemplificata) è:

  • Rate(periodi;importo rata;valore prestito;valore finale;tipo;guess) dove:

  • periodi - obbligatorio. Valore Double che specifica il numero totale di periodi di pagamento. Nel caso di un prestito di durata complessiva di 4 anni da restituire con rate mensili, il numero totale dei periodi di pagamento sarà 4 * 12 = 48.

  • importo rata obbligatorio. Valore Double che specifica la rata da pagare per ciascun periodo. Le rate sono in genere costituite da un capitale e da un interesse che rimangono invariati per la durata della rendita annuale.

  • valore prestito  obbligatorio. E' l'importo richiesto o concesso come finanziamento

  • valore finale  facoltativo. Se viene omesso, verrà utilizzato il valore 0. In genere un prestito va estinto, e quindi il valore finale sarà uguale a zero; potremmo però considerare un finanziamento che preveda un valore di riscatto finale (come succede nei leasing auto), in questo caso dovremmo indicare il valore di riscatto contrattato, anche se esiste una Funzione specifica per questo tipo di finanziamenti.

  • tipo corrisponde a 0 o a 1 e indica le scadenze dei pagamenti; se tipo è uguale a 0 (oppure omesso) la scadenza viene considerata alla fine del periodo (cioè scadenza posticipata), se invece è uguale a 1 vuol dire che il pagamento della rata è anticipata; in pratica vuol dire questo: otteniamo un prestito il 30/12/04 e scegliamo di restituire in rate mensili: se la scadenza del primo mese verrà posta al 30/01/05 sarà tipo posticipato, se invece fosse posta al 01/01/05 tipo sarà anticipato.

  • guess facoltativa.Valore Variant che specifica il valore previsto come risultato di Rate. Se viene omesso, guess verrà impostato su 0,1, ovvero il 10%. Rate viene calcolata per iterazione. A partire dal valore di guess, Rate esegue un ciclo di calcolo fino a ottenere un risultato con approssimazione pari allo 0,00001%. Se dopo 20 tentativi non si ottiene alcun risultato, la funzione Rate avrà esito negativo. Se la stima corrisponde al 10% e Rate ha esito negativo, fare un nuovo tentativo assegnando un diverso valore a guess.

Nota: Per tutti gli argomenti, le uscite (l'importo rata, in questo caso) vengono indicate con numeri negativi e le entrate con numeri positivi.

Facciamo un esempio: abbiamo richiesto un finanziamento di € 7.000 per l'acquisto di un auto nuova, da estinguere in 3 anni, quindi 36 mesi (numero rate); ci viene proposto un "eccezionale economico" finanziamento da € 215 a rata mensile. Ora, al di là di un semplice calcolo per conoscere il costo totale del prestito (215 x 36 = 7740, quindi € 740 di costo in tre anni), non sappiamo quanto "economico" sia effettivamente il prestito, con la funzione Rate otterremo come risultato un tasso di interesse applicato del 6,64% annuo, valore che ci servirà per le nostre valutazioni. Se consideriamo che una banca, su un libretto di risparmio, normalmente concede un tasso di interessi dello 0,6% annuo, facciamo presto a considerare quanto "economico" sia il tasso richiesto per il prestito, e comunque possiamo andare sul web ed informarci quale sia il "tasso di usura" previsto nei vari casi. C'è da considerare che nel nostro calcolo non abbiamo considerato le spese e i costi che in genere il concedente un prestito applica aggiungendole al finanziamento, per cui l'effettivo valore iniziale sarà maggiore di € 7.000, con un decremento quindi valore del tasso applicato. Ma sono tutti conteggi che ci serviranno per richiedere delucidazioni al concedente il prestito.

Vediamo ora le istruzioni; possiamo usare delle textbox poste su userform, dove inserire i dati che formeranno gli argomenti della funzione, oppure usare una sequenza di InputBox, dove inserire i dati necessari; facciamo entrambe le soluzioni.

Le TextBox in questo caso sono dalla 1 alla 4, e le istruzioni le inseriamo nell'evento Click del CommandButton. Poichè è necessario che tutti i valori siano del tipo Double, usiamo la "funzione di conversione del tipo" CDbl visto che dimensioniamo le variabili come Variant (non indicando il "tipo di dati") (oppure potremmo dimensionare ogni variabile come Double (riga per riga)). In queste istruzioni non impostiamo il valore facoltativo guess nè del Valore finale, considerando zero come estinzione del prestito.

  • Private Sub CommandButton1_Click()
    'dichiariamo le variabili
    Dim DurataMesi, ImportoRata, ImportoPrestito, TassoIntAnnuo
    'assegniamo alle variabili i rispettivi valori che avremo inserito nelle TextBox
    DurataMesi = CDbl(TextBox1)
    ImportoRata = CDbl(TextBox2)
    ImportoPrestito = CDbl(TextBox3)
    'TassoIntAnnuo è il valore restituito dalla funzione Rate, valore che va moltiplicato per 12 per renderlo annuo, e per '100 dato che è un valore percentuale; il valore 0 nella funzione è il "tipo" di pagamento (posticipato).
    TassoIntAnnuo = (Rate(DurataMesi, -ImportoRata, ImportoPrestito, 0) * 12) * 100
    'quindi si rende il tasso ottenuto nella TextBox4, e si formatta a due decimali.
    TextBox4 = CDbl(TassoIntAnnuo)
    TextBox4 = Format$(TextBox4, "#,###.00")
    End Sub

Vediamo ora le stesse istruzioni per usare la funzione Rate() ma senza usare TextBox, usando invece delle InputBox che servono a reperire i dati necessari:

  • Private Sub CommandButton2_Click()
    Dim DurataMesi, ImportoRata, ImportoPrestito, TassoIntAnnuo
    Fmt = "##0.00"
     'impostiamo la variabile Fmt per il formato a due decimali
    DurataMesi = InputBox("Numero delle rate mensili:") 
    'lanciamo le tre inputbox
    ImportoRata = InputBox("Importo della rata mensile:")
    ImportoPrestito = InputBox("Ammontare del prestito:")
    'impostiamo le variabili viste sopra come argomenti della funzione Rate
    TassoIntAnnuo = (Rate(DurataMesi, -ImportoRata, ImportoPrestito, 0) * 12) * 100
    'quindi si rende il tasso ottenuto con un messaggio, e si formatta a due decimali.
    MsgBox "Il tasso di interesse corrisponde al " & Format(CDbl(TassoIntAnnuo), Fmt) & " %."
    End Sub

Per evitare di andare subito a protestare se i nostri conti non tornano, non sarebbe male fare la riprova, utilizzando i dati in nostro possesso, per verificare se, con il tasso di interesse annuo ottenuto, conoscendo il numero di rate e l'importo del prestito, sia giusto l'importo della rata mensile. Ma ci può servire anche per verificare quale rata dovremmo pagare a fronte di un'ipotetico finanziamento da richiedere.

In questo caso dovremo usare la Funzione Pmt() (corrisponde alla Funzione RATA() del foglio di lavoro) che serve appunto a calcolare il pagamento per un prestito sulla base di pagamenti e di un tasso di interesse costanti, cioè ci restituisce l'importo della rata da pagare (comprensiva di interesse e capitale) relativa ad un finanziamento da estinguere in un determinato periodo di tempo, ad un tasso di interesse conosciuto. La sua sintassi è:

  • Pmt(tasso_int;periodi;valore prestito;valore finale;tipo)

Anche qui, stesso discorso della funzione Rate(), gli argomenti in grassetto sono obbligatori, mentre per valore finale, se omesso, verrà considerato il valore zero, cioè l'estinzione del prestito; anche per tipo, se omesso, verrà considerato lo zero, cioè pagamenti posticipati. Vediamo l'applicazione pratica e le istruzioni, usando TextBox per l'inserimento dei dati; aggiungiamo anche un'altra TextBox che ci servirà ad ottenere il costo totale del finanziamento con una semplice moltiplicazione : numero rate * importo rata. Usiamo i dati utilizzati per l'esempio sopra, e verifichiamo: il tasso annuo lo abbiamo ricavato, 36 sono le rate, 7000 è l'importo richiesto come finanziamento: (vediamo i decimali nella Rata Mensile e nel Costo Finanz. perchè abbiamo impostato il formato a due decimali

le TextBox ora sono dalla 5 alla 9 comprese, in sequenza.

  • Private Sub CommandButton3_Click()
    Dim DurataMesi, ImportoPrestito, TassoIntAnnuo
    TassoIntAnnuo = CDbl(TextBox5) / 100 / 12  
    'il tasso reso mensile e non percentuale
    DurataMesi = TextBox6                                 
     'numero rate
    ImportoPrestito = CDbl(TextBox7)                  
    'importo finanziato
    TextBox8 = -Pmt(TassoIntAnnuo, DurataMesi, ImportoPrestito)  
    'otteniamo la rata con la funzione Pmt (negativa)
    TextBox8 = Format$(CDbl(TextBox8), "#,###.00") 
    'formattiamo la rata a due decimali
    TextBox9 = CDbl(TextBox8) * Val(TextBox6)   
    'otteniamo il costo totale finanziamento
    TextBox9 = Format$(TextBox9, "#,###.00")   
    'formattiamo il costo totale a due decimali
    End Sub

Chi lo desidera potrà modificarsi le istruzioni per eseguire i calcoli tramite inserimento dati da InputBox.

Passando invece agli Ammortamenti, prenderemo in esame tre tipi di Ammortamento. Tutti gli argomenti delle funzioni dovranno essere numeri positivi, ed è necessario usare la stessa unità di misura per vita_utile e per durata : se la prima è espressa in anni, anche la seconda lo dovrà essere.

  • Ammortamento a quote costanti (o Ammortamento diretto) di un bene, in un singolo periodo; si suppone che l'ammortamento sia uniforme durante tutta la vita utile del bene; il costo iniziale del bene, meno il suo valore residuo, è deducibile in quantità equivalenti durante la vita del bene. Usiamo la Funzione SLN(), la cui sintassi è:
    SLN(costo, valore_residuo, durata) - vediamo un esempio tratto dalla guida in linea, impostato opportunamente con variabili in italiano, nel quale si controlla anche che la durata sia scritta in mesi anzichè anni, e che il numero di mesi inserito sia corrispondente ad anni, altrimenti arrotonda (se scriviamo 22 (mesi) verrà arrotondato a 24, corrispondenti a 2 anni)

  • Private Sub CommandButton4_Click()
    Dim Fmt, Costo, ValoreResiduo, Durata, VitaUtile, QuotaAmm
    Const MesiPerAnno = 12
    ' Numero di mesi in un anno.
    Fmt = "###,##0.00"
    ' Definisce il formato valuta.
    Costo = InputBox("Costo iniziale del bene:") 
     'si richiedono i dati con tre inputbox
    ValoreResiduo = InputBox("Valore del bene al termine della vita utile:")
    Durata = InputBox("Durata in mesi della vita utile del bene:")
    Do While Durata < MesiPerAnno
    ' si verifica che Durata (il periodo inserito in mesi)  sia >= 1 anno,
    MsgBox "La vita utile del bene deve essere maggiore o uguale ad un anno."
    Durata = InputBox("Durata in mesi della vita utile del bene:")
    Loop
    VitaUtile = Durata / MesiPerAnno
    ' Converte i mesi in anni.
    If VitaUtile <> Int(Durata / MesiPerAnno) Then
    VitaUtile = Int(VitaUtile + 1)
    ' Arrotonda all'anno più vicino.
    End If
    QuotaAmm = SLN(Costo, ValoreResiduo, VitaUtile)
     'otteniamo la quota ammortamento, e si avvisa formattando
    MsgBox "L'ammortamento è di " & Format(QuotaAmm, Fmt) & " all'anno."
    End Sub

  • Ammortamento variabile a quote decrescenti - (o Ammortamento) in questo metodo l'ammortamento avviene a un ritmo accelerato: è maggiore nei primi periodi e minore nei successivi, e viene calcolato come percentuale del valore netto del bene (il costo del bene meno l'ammortamento attribuito agli anni precedenti). Usiamo la funzione DDB() la cui sintassi è:

  • DDB(Costo del bene, Valoreresiduo del bene, Vita utile del bene, periodo di calcolo(ammort) [, fattore]) . Gli argomenti Vita utile  e periodo di calcolo devono essere espressi utilizzando la stessa unità di tempo. Se, ad esempio, Vita utile è espresso in mesi, anche periodo di calcolo dovrà essere espresso in mesi. Tutti gli argomenti devono essere numeri positivi. L'argomento Fattore è facoltativo, è un valore Variant che specifica la quota di ammortamento. Se l'argomento è omesso, verrà utilizzato 2, corrispondente al metodo di ammortamento a doppie quote decrescenti. La funzione DDB() calcola l'ammortamento in un periodo specificato in base alla seguente formula:

    Ammortamento / periodo di calcolo = ((costo del bene – valoreresiduo) * fattore) / vita utile
     

  • Private Sub CommandButton5_Click()
    Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, DepYear, Depr
    Const YRMOS = 12 '
    Numero di mesi in un anno.
    Fmt = "###,##0.00"
    InitCost = InputBox("Costo iniziale del bene:")
    SalvageVal = InputBox("Digitare il valore del bene al termine della vita utile.")
    MonthLife = InputBox("Durata in mesi della vita utile del bene:")
    Do While MonthLife < YRMOS
    ' Verifica che il periodo sia >= 1 anno.
    MsgBox "La vita utile del bene deve essere maggiore o uguale ad un anno."
    MonthLife = InputBox("Durata in mesi della vita utile del bene:")
    Loop
    LifeTime = MonthLife / YRMOS
    ' Converte i mesi in anni.
    If LifeTime <> Int(MonthLife / YRMOS) Then
    LifeTime = Int(LifeTime + 1)
    ' Arrotonda all'anno più vicino.
    End If
    DepYear = CInt(InputBox("Immettere l'anno per il calcolo dell'ammortamento."))
    Do While DepYear < 1 Or DepYear > LifeTime
    MsgBox "Immettere almeno 1 ma non più di " & LifeTime
    DepYear = InputBox("Immettere l'anno per il calcolo dell'ammortamento.")
    Loop
    Depr = DDB(InitCost, SalvageVal, LifeTime, DepYear)
    MsgBox "L'ammortamento per l'anno " & DepYear & " è " & _
    Format(Depr, Fmt) & "."
    End Sub

  • Ammortamento a somma degli anni (o Ammortamento annuo) - calcola l'ammortamento pluriennale di un bene per uno specifico periodo di tempo; l'ammortamento viene calcolato sottraendo dal costo del bene il suo valore residuo. Si tratta ancora di una forma di ammortamento accelerato. Usiamo la funzione SYD() la cui sintassi è:

  • SYD(cost, salvage, life, period)  l'argomento cost specifica il costo iniziale del bene; salvage specifica il valore del bene al termine della vita utile; life specifica la durata della vita utile del bene; period specifica il periodo di calcolo dell'ammortamento del bene. Tutti gli argomenti sono obbligatori.

  • Private Sub CommandButton6_Click()
    Dim Fmt, InitCost, SalvageVal, MonthLife, LifeTime, DepYear, PDepr
    Const YEARMONTHS = 12
    ' Numero di mesi in un anno.
    Fmt = "###,##0.00"
    ' Definisce il formato valuta.
    InitCost = InputBox("Costo iniziale del bene:")
    SalvageVal = InputBox("Valore del bene al termine della vita utile:")
    MonthLife = InputBox("Durata in mesi della vita utile del bene:")
    Do While MonthLife < YEARMONTHS
    ' Verifica che il periodo sia >= 1 anno.
    MsgBox "La vita utile del bene deve essere maggiore o uguale ad un anno."
    MonthLife = InputBox("Durata in mesi della vita utile del bene:")
    Loop
    LifeTime = MonthLife / YEARMONTHS
    ' Converte i mesi in anni.
    If LifeTime <> Int(MonthLife / YEARMONTHS) Then
    LifeTime = Int(LifeTime + 1)
    ' Arrotonda all'anno più vicino.
    End If
    DepYear = CInt(InputBox("Anno dell'ammortamento:"))
    Do While DepYear < 1 Or DepYear > LifeTime
    MsgBox "Digitarne almeno 1 ma non più di " & LifeTime
    DepYear = CInt(InputBox("Anno dell'ammortamento:"))
    Loop
    PDepr = SYD(InitCost, SalvageVal, LifeTime, DepYear)
    MsgBox "L'ammortamento per l'anno " & DepYear & " è di " & Format(PDepr, Fmt) & "."
    End Sub

Le procedure sono impostate con richiesta dati attraverso InputBox, ma chiunque potrà modificarle per inserimento dati tramite TextBox oppure celle di un foglio di lavoro.

Queste non sono tutte le Funzioni Finanziarie disponibili in Excel, ma basta consultare la guida in linea del VBE per trovarle tutte. Le ho presentate per stimolare gli interessati ad approfondirle in proprio. Io non mi intendo di regole finanziare, quindi non mi consultate per sapere ad esempio, quando usare una funzione di ammortamento piuttosto che un'altra; rivolgetevi ad un esperto del settore finanziario o ad un commercialista.

 


Buon lavoro.

prelevato sul sito www.ennius.altervista.org