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 è:
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
|