Google Gruppi non supporta più i nuovi post o le nuove iscrizioni Usenet. I contenuti storici continuano a essere visibili.

[Quizzone di excel] Quesito n. 5

26 visualizzazioni
Passa al primo messaggio da leggere

plinius

da leggere,
5 mag 2011, 09:06:5405/05/11
a
Riesco ad avere dalla mia banca un mutuo di 10.000 euro da rimborsare in
dieci rate annue posticipate al tasso del 6%.
Per non farmi fregare dalla banca voglio ricalcolarmi la rata annua da
pagare.
Scrivo in un foglio excel in B2 6%, in B3 10, in B4 10000, quindi inserisco
in B5 la formula
=RATA(B2;B3;-B4) ed ottengo 1.358,68 euro.
Proprio quello che m'ha chiesto la banca... però! sono stati onesti!
Non pago (nel senso di appagamento), faccio appello alla mia memoria e tento
di ricordare la formula per calcolare la rata... mumble mumble... dunque
era... R= A*i/(1-(1+i)^-n)
La scrivo nella cella C5:
=B4*B2/(1-(1+B2)^-B3)
e quasi con stupore vedo apparire il numero 1.358,68.
Poi, tanto per provare, inserisco in B7
=TASSO(B3;B5;-B4)
e mi restituisce impeccabilmente il mio tasso: 6%
Però queste funzioni di excel sono sicuramente comode, ma quando conosci le
formule ti fanno anche sentire un po' scemo: in fondo ricavare il tasso non
è che la formula inversa a quella che calcola la rata no?
Ora me la scrivo da solo, mi dico, ma subito mi accorgo che l'impresa è
piuttosto ardua e che, per ottenere il tasso conoscendo valore attuale,
numero di annualità e rata, mi ci serve il buon VBA...

Ed ecco il... QUESITO n. 5

Scrivere una UDF che, sulla base dei parametri posti in B3 (numero rate), B4
(valore attuale del prestito) e B5 (importo della rata costante posticipata)
calcoli il tasso d'interesse applicato al mutuo. Dia cioè, come risultato,
lo stesso valore che nel mio foglio di excel è già presente in B2.

=TA(B3;B4;B5)

deve restituire 6% ma se la rata dovesse essere pari o inferiore ad A/n
(cioè alla semplice divisione "importo del prestito / numero di annualità",
deve restituirmi un testo nella cella "Dati errati". Ovvio che nessuno mi fa
un prestito gratis o addirittura regalandomi soldi!!

La risposta al quesito è il testo della UDF, a partire da "Function..." e
fino a "End Function".

Buon lavoro!
E.


r

da leggere,
5 mag 2011, 10:36:4305/05/11
a

Function fTasso(vPeriodo, vPagamento, vValoreAttuale)
If vPagamento > (vValoreAttuale / vPeriodo) Then
fTasso = Application.Rate(vPeriodo, vPagamento, vValoreAttuale)
Else
fTasso = "Dati errati"
End If
End Function

vediamo cosa mi dici :-)
r

plinius

da leggere,
5 mag 2011, 10:55:3005/05/11
a

"r" <robb...@gmail.com> ha scritto nel messaggio
news:afc1b558-6784-4e4a...@e13g2000vbo.googlegroups.com...

****************************

Dico che, come primo della classe, rispondendo prima di 2 ore perdi 5 punti
(il regolamento lo hai scritto tu eheh :-))

E aggiungo che, naturalmente, l'uso della funzione TASSO l'ho esclusa nel
porre il quesito e, quindi, la risposta non va bene!

...perň... considerando che questa NON č una risposta, penso che tu possa
farla franca sulla penalizzazione per questa volta ... va!!! :-)

E.


r

da leggere,
5 mag 2011, 11:03:0305/05/11
a
On 5 Mag, 16:55, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel messaggionews:afc1b558-6784-4e4a...@e13g2000vbo.googlegroups.com...

> On 5 Mag, 15:06, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
> Function fTasso(vPeriodo, vPagamento, vValoreAttuale)
> If vPagamento > (vValoreAttuale / vPeriodo) Then
>     fTasso = Application.Rate(vPeriodo, vPagamento, vValoreAttuale)
> Else
>     fTasso = "Dati errati"
> End If
> End Function
>
> vediamo cosa mi dici :-)
> r
>
> ****************************
>
> Dico che, come primo della classe, rispondendo prima di 2 ore perdi 5 punti
> (il regolamento lo hai scritto tu eheh :-))
>
> E aggiungo che, naturalmente, l'uso della funzione TASSO l'ho esclusa nel
> porre il quesito e, quindi, la risposta non va bene!

beh ... un punticino perchè sono stato simpatico :-) ... no Eh.
... ci vorrebbe scossa ... è lui l'esperto di ammortamenti ...
tassi ... watt :-)
r

plinius

da leggere,
5 mag 2011, 11:12:5405/05/11
a

"r" <robb...@gmail.com> ha scritto nel messaggio
news:818cf9fc-d755-4a7d...@j4g2000pro.googlegroups.com...

******************************

Punti simpatia il regolamento purtroppo non ne prevede, mannaggia! :-(
Comunque la risposta non prevede alcuna conoscenza di formule: quelle le ho
già date io.
Serve di scovare un algoritmo per ricavare quella dispettosa "i" dalla
formula...

Coraggio!
E. :-)


paoloard

da leggere,
5 mag 2011, 11:20:5205/05/11
a
"plinius" ha scritto nel messaggio news:ipuepn$rcd$1...@dont-email.me...


cut
******************************

Punti simpatia il regolamento purtroppo non ne prevede, mannaggia! :-(
Comunque la risposta non prevede alcuna conoscenza di formule: quelle le ho
già date io.
Serve di scovare un algoritmo per ricavare quella dispettosa "i" dalla
formula...

Coraggio!
E. :-)
---------------------------------------------------------------------

Io avevo pensato all'algoritmo/logaritmo, ma i miei ricordi di analisi
matematica sono ormai relegati nel più profondo dei profondi.
Dalla formula originale della rata
R= A*i/(1-(1+i)^-n)
deriva
LogR = Log A + Log i - Log (1-(1+i)^-n)

però lo sviluppo del terzo logaritmo, ammesso che sia possibile, mi è oscuro
come la Morte Nera.
Chissà se la nostra cara amica Gio ha un asso nella manica.

ciao paoloard
http://www.riolab.org

plinius

da leggere,
5 mag 2011, 11:53:4605/05/11
a

"paoloard" <xxp...@alice.it> ha scritto nel messaggio
news:ipuf98$ism$1...@dont-email.me...

Infatti Paolo, non si riesce neppure con i logaritmi ad estrarre quella "i"
imprigionata.
Bisogna far ricorso ad un metodo che, partendo da un tasso arbitrario, ci
consenta di avvicininarci, per iterazioni successive, a quello reale.
Anche la funzione nativa TASSO segue questa via e, a questo scopo, prevede
un parametro opzionale (il 6°) che è il tasso presunto. Serve per arrivare
prima a quello vero...
Ciao,
E. :-)


r

da leggere,
5 mag 2011, 12:03:5605/05/11
a
On 5 Mag, 17:53, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "paoloard" <xxp...@alice.it> ha scritto nel messaggionews:ipuf98$ism$1...@dont-email.me...
>
>
>
> > "plinius"  ha scritto nel messaggionews:ipuepn$rcd$1...@dont-email.me...

io ci provo ... ma di matematica finanziaria ci capisco una fava ...
poi non specifichi quanto l'arrotondamento ...
boh ... ecco lo schifo :-)

Function fTasso(n, R, A, Optional i = 1)
Dim v
If R > A / n Then
v = A * i / (1 - (1 + i) ^ -n)
If VBA.Round(v, 2) = VBA.Round(R, 2) Then
fTasso = VBA.Round(i, 2)
ElseIf v > R Then
fTasso = fTasso(n, R, A, i * 0.9)
Else
fTasso = fTasso(n, R, A, i * 1.1)
End If


Else
fTasso = "Dati errati"
End If
End Function

r

r

da leggere,
5 mag 2011, 12:16:3805/05/11
a

boh ... giusto per gestire gli errori

Function fTasso(n, R, A, Optional i = 1)
Dim v

On Error GoTo esci


If R > A / n Then
v = A * i / (1 - (1 + i) ^ -n)
If VBA.Round(v, 2) = VBA.Round(R, 2) Then
fTasso = VBA.Round(i, 2)
ElseIf v > R Then

fTasso = fTasso(n, R, A, VBA.Round(i * 0.9, 2))
Else
fTasso = fTasso(n, R, A, VBA.Round(i * 1.1, 2))


End If
Else
fTasso = "Dati errati"
End If

Exit Function
esci:
fTasso = CVErr(2036)
End Function


saluti
r

r

da leggere,
5 mag 2011, 12:19:3905/05/11
a

curiosita ... excel 2007 in presenza di un errore:
Spazio dello stack esaurito (errore 28)

se vai al debug ... se ne va in crash!
fantastico!
r

plinius

da leggere,
5 mag 2011, 12:28:0405/05/11
a

"r" <robb...@gmail.com> ha scritto nel messaggio
news:5d68852c-cd07-407a...@cu4g2000vbb.googlegroups.com...


saluti
r

****************************

Direi che funziona per avere tassi arrotondati all'unità percentuale, ma il
risultato che desidero è quello esatto, con la precisione di un double.
E. :-(


giovanna

da leggere,
5 mag 2011, 13:37:4005/05/11
a
Il 5/5/2011, plinius ha detto :

>
> Ed ecco il... QUESITO n. 5
>
> Scrivere una UDF che,

uuuhhh ...
Dunque:
1. Arrivo solo ora e, in ogni caso avrei trovato ormai tutto fatto!
2. Che brutto quesito! :-) :-)
3. Che bello, si chede una UDF e io non me ne intendo!!!

Augurandomi di poter partecipare al prox, bye!

--
ciao
giovanna
.......................
www.riolab.org
.........................


Scossa

da leggere,
5 mag 2011, 14:00:4705/05/11
a
On 5 Mag, 15:06, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> Ed ecco il... QUESITO n. 5
>
> Scrivere una UDF che, sulla base dei parametri posti in B3 (numero rate), B4
> (valore attuale del prestito) e B5 (importo della rata costante posticipata)
> calcoli il tasso d'interesse applicato al mutuo. Dia cioè, come risultato,
> lo stesso valore che nel mio foglio di excel è già presente in B2.
>
> =TA(B3;B4;B5)
>
> deve restituire 6% ma se la rata dovesse essere pari o inferiore ad A/n
> (cioè alla semplice divisione "importo del prestito / numero di annualità",
> deve restituirmi un testo nella cella "Dati errati". Ovvio che nessuno mi fa
> un prestito gratis o addirittura regalandomi soldi!!
>
> La risposta al quesito è il testo della UDF, a partire da "Function..." e
> fino a "End Function".
>
> Buon lavoro!
> E.

Ciao plinius,

non hai specificato la precisione richesta, comunque provo a buttarla
lì (specifico subito che se dovessi proporre io il prossimo quiz
potrei farlo solo durante il weekend):

'in un modulo standard
'----------------------
Public Function Ta(ByVal n As Long, ByVal Cap As Currency, ByVal R As
Currency) As Double

Dim nTX As Double
Dim nI As Long
Dim nFat As Double
Dim nloop As Long
Dim nRata As Currency
Dim i As Double

nFat = 0.00001
i = 0.05
R = Round(R, 2)
Do While nloop < 10000 And nRata <> R
nRata = Round(Cap * i / (1 - (1 + i) ^ -n), 2)
If nRata > R Then
i = i - nFat
Else
i = i + nFat
End If
nloop = nloop + 1
Loop

Ta = Round(i, 4)
End Function


Bye!
Scossa

Scossa

da leggere,
5 mag 2011, 14:02:2005/05/11
a

>
>     Dim nTX As Double
>     Dim nI As Long

ovviamente si possono togliere queste due dichiarazioni (sono due
variabili che non ho usato).

Bye!
Scossa

umbeumbe

da leggere,
5 mag 2011, 14:04:0405/05/11
a
> r- Nascondi testo citato
>
> - Mostra testo citato -

ciao a tutti,
approfitto del vs. quesito per un chiarimento:
la formula =((B5*B3)/B4-1)/B3 dà 3,59%
Questo cos'e', l'interesse annuo, il tasso annuo o cos'altro ???
Scusate l'intrusione e buona serata... e vinca il migliore!
umberto

plinius

da leggere,
5 mag 2011, 14:18:3905/05/11
a

"giovanna" <g_ar...@asiatin.it> ha scritto nel messaggio
news:4dc2e06e$0$38651$4faf...@reader1.news.tin.it...

Ma non si tratta di un quesito finanziario... con un po' di riflessione si
puň affrontare tranquillamente!
Perň... capisco che non č un genere ben accetto e allora prometto: non lo
faccio piů! :-(

Come previsto dal regolamento, se non ci saranno soluzioni, tra due giorni
darň la mia.

Ciao,
E.


plinius

da leggere,
5 mag 2011, 14:40:2405/05/11
a

"Scossa" <scos...@gmail.com> ha scritto nel messaggio
news:e1f35fdc-42c8-44e7...@q30g2000vbs.googlegroups.com...


Bye!
Scossa

************************

La precisione che desidero e almeno pari a quella della funzione nativa che
restituisce 10 cifre decimali percentuali esatte (quindi 12 reali).
La tua UDF restituisce 2 cifre (percentuali) decimali esatte.
Certo diminuendo il valore di nFat si può aumentare la precisione, ma
diventa sempre più lenta e perciò difficilmente accettabile.
Però... rendendo flessibile quel nFat... una delle vie percorribili è
quella! :-)

Ciao,
E.


Scossa

da leggere,
5 mag 2011, 16:31:1105/05/11
a
On 5 Mag, 20:40, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> La precisione che desidero e almeno pari a quella della funzione nativa che
> restituisce 10 cifre decimali percentuali esatte (quindi 12 reali).
> La tua UDF restituisce 2 cifre (percentuali) decimali esatte.
> Certo diminuendo il valore di nFat si può aumentare la precisione, ma
> diventa sempre più lenta e perciò difficilmente accettabile.
> Però... rendendo flessibile quel nFat... una delle vie percorribili è
> quella! :-)
>
> Ciao,
> E.

Così?

'-----------------------------
Public Function Ta(ByVal n As Long, ByVal Cap As Double, ByRef R As
Double) As Double

Dim nFat As Double
Dim nloop As Long

Dim nRata As Double
Dim i As Double

nFat = 0.00001
i = 0.050
Do While Abs(R - nRata) > 0.0000000001 And nloop < 10000
nRata = Cap * i / (1 - (1 + i) ^ -n)
Select Case Abs(R - nRata)
Case Is < 0.0000001
nFat = 0.000000000001
Case Is < 0.000001
nFat = 0.00000000001
Case Is < 0.00001
nFat = 0.0000000001
Case Is < 0.0001
nFat = 0.00000001
Case Is < 0.001
nFat = 0.0000001
Case Is < 0.01
nFat = 0.000001
Case Is > 1
nFat = 0.00001
Case Is > 10
nFat = 0.0001
Case Else
nFat = 0.000001
End Select


If nRata > R Then
i = i - nFat

'nFat = nFat / 10
ElseIf nRata < R Then
i = i + nFat
Else
Exit Do


End If
nloop = nloop + 1
Loop

Ta = Round(i, 10)
End Function
'--------------------

Bye!
Scossa

Scossa

da leggere,
5 mag 2011, 16:39:0805/05/11
a

P.S.: le celle del capitale e della rata passate come argomento alla
UDF devono essere formattate come numero con 10 decimali, altrimenti
se formattate come "valuta" sono arrotondate a 4 decimali.

P.S.2: ByRef R As Double correggasi in ByVal R as double

Scossa

da leggere,
6 mag 2011, 02:19:5706/05/11
a
> P.S.2:  ByRef R As Double correggasi in ByVal R as double- Nascondi testo citato

>
> - Mostra testo citato -

Versione rivista, con possibilià di passare come argomento opzionale
il n.ro di iterazioni massimo e di restituire come risultato una
matrice con tasso i, n.ro iterazioni eseguite e rata calcolata
(semplicemente selezionando 3 celle contigue p.e. D1 E1 F1 digitando
=Ta(B3;B4;B5;5000) e confermando con ctrl+maiusc+invio)
'----------------------------
Public Function Ta(ByVal n As Long, ByVal Cap As Double, _
ByVal R As Double, Optional ByVal Ite As Long = 10000) As Variant

Dim nFat As Double
Dim nloop As Long
Dim nRata As Double
Dim i As Double

nFat = 0.00001
i = 0.05

'R = Round(R, 10)
Do While Abs(R - nRata) > 0.0000000001 And nloop < Ite

Ta = Array(Round(i, 10), nloop, nRata)

End Function
'----------------------

Bye!
Scossa

paoloard

da leggere,
6 mag 2011, 02:53:2106/05/11
a
"plinius" ha scritto nel messaggio news:ipuj6m$hhq$1...@dont-email.me...


"r" <robb...@gmail.com> ha scritto nel messaggio

cut
r

****************************

Direi che funziona per avere tassi arrotondati all'unità percentuale, ma il
risultato che desidero è quello esatto, con la precisione di un double.
E. :-(

----------------------------------------------------------------

Non è certo la risposta al quesito dato che chiede una UDF, ma solo per
soddisfare il mio inguaribile protagonismo, un modo per lanciare un calcolo
iterattivo senza codice è usare la funzione fornita da Excel che è la
Ricerca Obiettivo e il gioco è fatto.
Please, non ditemi che non sono in tema, lo so già da me! :-)
Ciao a tutti


paoloard

da leggere,
6 mag 2011, 03:25:4806/05/11
a
"umbeumbe" ha scritto nel messaggio
news:630c8577-8464-4003...@x38g2000pri.googlegroups.com...

--------------------------------------------------------------

Questa è una formula astrusa per ottenere il tasso di investimento di un
capitale per un anno; quindi non ha a che vedere con pagamenti periodici.
La formula sarebbe:
M = C*(1+it)
dove
M è il montante (capitale + interessi) e tu hai fatto B5*B3 che non è altro
che il totale delle rate pagate
C è il capitale iniziale
i è il tasso annuo nominale
t è il tempo d'impiego (nel ns. caso n ovvero numero di pagamenti)

da cui:
i = (M-C)/C*t che tradotto in riferimenti di cella
i = (B5*B3-B4)/B4*B3
che è uguale a 3,59%

ciao paoloard
http://www.riolab.org

paoloard

da leggere,
6 mag 2011, 03:27:2106/05/11
a
"paoloard" ha scritto nel messaggio news:iq07qk$njs$1...@dont-email.me...

"umbeumbe" ha scritto nel messaggio

cut

ciao a tutti,
approfitto del vs. quesito per un chiarimento:
la formula =((B5*B3)/B4-1)/B3 dà 3,59%
Questo cos'e', l'interesse annuo, il tasso annuo o cos'altro ???
Scusate l'intrusione e buona serata... e vinca il migliore!
umberto
--------------------------------------------------------------

Questa è una formula astrusa per ottenere il tasso di investimento di un
capitale per un anno; quindi non ha a che vedere con pagamenti periodici.
La formula sarebbe:
M = C*(1+it)
dove
M è il montante (capitale + interessi) e tu hai fatto B5*B3 che non è altro
che il totale delle rate pagate
C è il capitale iniziale
i è il tasso annuo nominale
t è il tempo d'impiego (nel ns. caso n ovvero numero di pagamenti)

da cui:
i = (M-C)/C*t che tradotto in riferimenti di cella
i = (B5*B3-B4)/B4*B3
che è uguale a 3,59%

ciao paoloard
http://www.riolab.org
-------------------------------------------------

oddio ho quotato male... adesso chi la sente!?! :-((

paoloard
http://www.riolab.org


Mauro Gamberini

da leggere,
6 mag 2011, 03:57:4406/05/11
a
boh ... giusto per gestire gli errori

Function fTasso(n, R, A, Optional i = 1)

On Error GoTo esci

****************************

UDF

???

---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/

plinius

da leggere,
6 mag 2011, 05:59:4106/05/11
a

"Scossa" <scos...@gmail.com> ha scritto nel messaggio
news:701e681d-11df-4957...@gu8g2000vbb.googlegroups.com...

End Function
'----------------------

Bye!
Scossa

******************************

Ciao electric!
La strada è giusta, ma non porta al risultato voluto fintantoché la misura
di incremento o decremento del tasso ipotetico sia determinata per
scaglioni. Per avere la necessaria flessibilità deve essere calcolata.
Supponiamo che il rapporto A/n sia 1000: ne deduco che se non pagassi
interessi (tasso 0) la rata sarebbe 1000.
Mettiamo che la rata reale sia, invece, 1400.
Ipotizziamo un tasso unitario arbitrario 0,05 (5%) e otteniamo una rata di
1300.
Possiamo dire che una variazione della tara di +400 (1400-1000), la si è
ottenuta variando il tasso di +0,05 (0,05-0)
Ora, volendo aumentare la rata di ulteriori 100 euro, imposto la
proporzione:
400 : 0,05 = 100 : x
x è la variazione da apportare a 0,05 per cercare di ottenere 1400.
Dal momento che non c'è una proporzionalità lineare tra i due elementi, non
otterrò realmente una rata di 1400, ma mi avvicino a 1400.
Ma posso iterare e avvicinarmi, passo per passo, sempre di più...

;-)
E.


plinius

da leggere,
6 mag 2011, 06:06:3806/05/11
a

"Scossa" <scos...@gmail.com> ha scritto nel messaggio
news:701e681d-11df-4957...@gu8g2000vbb.googlegroups.com...

On 5 Mag, 22:39, Scossa <scossa...@gmail.com> wrote:
> On 5 Mag, 22:31, Scossa <scossa...@gmail.com> wrote:

[cut]

Bye!
Scossa

********************

Correggo qualche errore di digitazione, mannaggia!
Leggi qui, non sopra!! :-((

Ciao electric!
La strada è giusta, ma non porta al risultato voluto fintantoché la misura
di incremento o decremento del tasso ipotetico sia determinata per
scaglioni. Per avere la necessaria flessibilità deve essere calcolata.
Supponiamo che il rapporto A/n sia 1000: ne deduco che se non pagassi
interessi (tasso 0) la rata sarebbe 1000.
Mettiamo che la rata reale sia, invece, 1400.
Ipotizziamo un tasso unitario arbitrario 0,05 (5%) e otteniamo una rata di
1300.

Possiamo dire che una variazione della rata di +300 (1300-1000), la si è


ottenuta variando il tasso di +0,05 (0,05-0)
Ora, volendo aumentare la rata di ulteriori 100 euro, imposto la
proporzione:

300 : 0,05 = 100 : x

Scossa

da leggere,
6 mag 2011, 06:25:5706/05/11
a
On 6 Mag, 12:06, "plinius" <punto.linea...@LEVARElibero.it> wrote:

CUT

> Dal momento che non c'è una proporzionalità lineare tra i due elementi, non
> otterrò realmente una rata di 1400, ma mi avvicino a 1400.
> Ma posso iterare e avvicinarmi, passo per passo, sempre di più...

Scusa plinius,

qui c'è il file:

https://rapidshare.com/files/460885540/Quiz5.xls

io ho provato vari valori di tasso e anche a variare il capitale o il
numero di rate e hosempre ottenuto il tasso preciso al 10 decimale.

Giusto per capire, mi fai un esempio di valori per i quali la udf
fallisce?

Bye!
Scossa

Scossa

da leggere,
6 mag 2011, 06:44:4506/05/11
a
On 6 Mag, 12:25, Scossa <scossa...@gmail.com> wrote:
>
> Giusto per capire, mi fai un esempio di valori per i quali la udf
> fallisce?
>

Come non detto: ho provato ad inserire un tasso a 6 decimali
(6,1234560000%) ed in effetti il tasso calcolato si ferma al 5
(6,1234500000%)

Bye!
Scossa

r

da leggere,
6 mag 2011, 06:54:0806/05/11
a
On 6 Mag, 12:06, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "Scossa" <scossa...@gmail.com> ha scritto nel messaggionews:701e681d-11df-4957...@gu8g2000vbb.googlegroups.com...

il problema è proprio l'algoritmo per calcolare il delta da aggiungere
o togliere al tasso ... il metodo della bisezione mi sembra possa
funzionare ma ... io mi sono fissato con una ricorsiva e mi
impantano ... ho anche avuto e ho poco tempo ... diciamo che il
problema comunque non è semplice partendo da zero ... beh guarderò la
tua soluzione ... sono molto interessato all'algoritmo per il
delta ...

ciao
r

plinius

da leggere,
6 mag 2011, 07:13:0306/05/11
a

"Scossa" <scos...@gmail.com> ha scritto nel messaggio
news:6b083ae8-c173-4b71...@a26g2000vbo.googlegroups.com...

CUT

Scusa plinius,

https://rapidshare.com/files/460885540/Quiz5.xls

Bye!
Scossa

**************

Sul mio foglio il risultato viene sempre arrotondato alla quarta cifra
percentuale, anche modificando la formattazione delle celle con rata e
capitale.
Poi, francamente, non vedo il motivo di una "Select Case" per attribuire
valori che possono essere più rapidamente ed efficacemente calcolati in modo
preciso.
Perché non provi a seguire la traccia che ho proposto?
Ciao,
Enrico :-)

plinius

da leggere,
6 mag 2011, 07:19:2006/05/11
a

"r" <robb...@gmail.com> ha scritto nel messaggio
news:1846f8bf-24e0-46f6...@u15g2000vby.googlegroups.com...

On 6 Mag, 12:06, "plinius" <punto.linea...@LEVARElibero.it> wrote:

il problema č proprio l'algoritmo per calcolare il delta da aggiungere


o togliere al tasso ... il metodo della bisezione mi sembra possa
funzionare ma ... io mi sono fissato con una ricorsiva e mi
impantano ... ho anche avuto e ho poco tempo ... diciamo che il

problema comunque non č semplice partendo da zero ... beh guarderň la


tua soluzione ... sono molto interessato all'algoritmo per il
delta ...

ciao
r

***************************

In effetti ci sono almeno due metodi diversi per raggiungere lo scopo.
Del secondo (che č anche piů interessante) ne parleremo dopo, ma per ora,
seguendo il percorso avviato da te e da Scossa, credo di aver dato un ottimo
spunto nel post qui sopra (quello delle 12:06).
La funzione, puň essere anche impostata come ricorsiva, ma anche no.
Una semplice iterazione funziona a meraviglia...

Ciao,
E. :-)


Scossa

da leggere,
6 mag 2011, 07:19:2506/05/11
a
On 6 Mag, 13:13, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> Poi, francamente, non vedo il motivo di una "Select Case" per attribuire
> valori che possono essere più rapidamente ed efficacemente calcolati in modo
> preciso.

Perchè altrimenti come fa roby a tagliare? :-)

> Perché non provi a seguire la traccia che ho proposto?

Ok, ci studio su!

Bye!
scossa

Scossa

da leggere,
6 mag 2011, 09:27:0306/05/11
a
On 6 Mag, 13:19, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> Una semplice iterazione funziona a meraviglia...
>
> Ciao,
> E. :-)

Ci riprovo:

'--------------------------


Public Function Ta(ByVal n As Long, ByVal Cap As Double, _
ByVal R As Double, Optional ByVal Ite As Long = 10000) As Variant

Dim nFat As Double
Dim nloop As Long
Dim nRata As Double

Dim nRata0Int As Double
Dim i As Double
Dim nIntR As Double
Dim nIntI As Double

nFat = 0.00001
i = 0.05

nRata0Int = Cap / n
nIntR = R - nRata0Int

Do While Abs(R - nRata) > 0.00000000001 And nloop < Ite


nRata = Cap * i / (1 - (1 + i) ^ -n)

nIntI = nRata - nRata0Int
i = i * nIntR / nIntI


nloop = nloop + 1
Loop

Ta = Array(i, nloop, nRata)

End Function
'---------------------

Scossa

da leggere,
6 mag 2011, 09:30:3606/05/11
a
On 6 Mag, 15:27, Scossa <scossa...@gmail.com> wrote:

>     Do While Abs(R - nRata) > 0.00000000001 And nloop < Ite


In realtà sono sufficienti poche iterazioni.

Bye!
Scossa

r

da leggere,
6 mag 2011, 09:46:1806/05/11
a

mi sembra che hai fatto centro!
aspettiamo il responso di E
ciao
r

plinius

da leggere,
6 mag 2011, 10:11:4906/05/11
a

"Scossa" <scos...@gmail.com> ha scritto nel messaggio
news:b78798ec-c6ba-4d46...@35g2000prp.googlegroups.com...

Dunque cominciamo dalle buone notizie: la risposta al quesito la ritengo
valida e proclamo Scossa vincitore del Quizzone n. 5!!! :-)))

Poi cominciamo con qualche osservazione.
Questa è la tua UDF nella quale ho inserito 600000 iterazioni al posto di
10000 ed ho sostituito l'ugaglianza assoluta a quella limitata.
Se leggi nella finestra immediata quante iterazioni svolge con un tasso
"diciamo" difficile come 4,23567890123565% vedrai che raggiunge il limite di
600000 (dando quindi un risultato appena un po' impreciso).
-----------------------------
Public Function Tasc(n As Long, Cap As Double, _
R As Double, Optional Ite As Long = 600000) As Variant

Dim nloop As Long, nRata As Double, nRata0Int As Double
Dim i As Double, nIntR As Double, nIntI As Double

i = 0.05
nRata0Int = Cap / n
nIntR = R - nRata0Int

Tasc = "Dati errati"
If R <= nRata0Int Then Exit Function
Do While Abs(R - nRata) > 0 And nloop < Ite


nRata = Cap * i / (1 - (1 + i) ^ -n)
nIntI = nRata - nRata0Int
i = i * nIntR / nIntI
nloop = nloop + 1
Loop

Tasc = Array(i, nloop, nRata)
Debug.Print "n. iterazioni: "; nloop
End Function
----------------------------

La spiegazione sta nel fatto che rideterminare direttamente il nuovo tasso,
piuttosto che l'aumento o la diminuzione di esso, NON porta a quella
riduzione dell'ordine di grandezza sul quale si lavora che a sua volta causa
il progressivo affinamento che conduce all'esito totalmente esatto.

Questa sotto, lavora invece sul "delta" (positivo o negativo) da sommare al
precedente valore provato:
---------------------------
Function i(n As Long, A As Double, R As Double) As Variant
Dim iold As Double, itmp As Double
Dim Rold As Double, Rnew As Double, c As Long
i = "Dati errati"
If R <= A / n Then Exit Function
Rold = A / n
i = 0.1
Do Until Rnew = R
Rnew = A * i / (1 - (1 + i) ^ -n)
If Rnew = Rold Then Exit Do
itmp = i + (R - Rnew) / (Rnew - Rold) * (i - iold)
c = c + 1
If c > 600000 Then Exit Do ' opzionale
iold = i: i = itmp: Rold = Rnew
Loop
Debug.Print c
End Function
------------------------------

Con quel tasso "difficile" (4,23567890123565%) la tua fa 600000 iterazioni,
questa ne fa 9 per arrivare alla perfetta uguaglianza.
Cionondimeno la tua UDF ottiene il risultato con sufficiente approssimazione
e, ritengo, debba essere considerata valida!!

.... poi c'è l'altro metodo che, pur avendo qualche problema su tassi vicini
allo 0 (che mai si verificheranno nella realta concreta), è simpaticissimo
da scoprire e estremamente agevole da tradurre in codice.
Se volete ve lo illustro...

Ciao,
E. :-)


r

da leggere,
6 mag 2011, 10:26:0606/05/11
a
On 6 Mag, 16:11, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "Scossa" <scossa...@gmail.com> ha scritto nel messaggionews:b78798ec-c6ba-4d46...@35g2000prp.googlegroups.com...

da vai ... ora sono curioso ...
poi vai anche da qualche altra parte ... :-)
r

plinius

da leggere,
6 mag 2011, 10:28:5306/05/11
a

"r" <robb...@gmail.com> ha scritto nel messaggio
news:dc29c107-7e43-41c1...@k22g2000yqh.googlegroups.com...

**********************

andrei subito da un'altra parte, che ne dici?
prrr :-))
E.


Scossa

da leggere,
6 mag 2011, 10:33:4406/05/11
a
On 6 Mag, 16:11, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
> Dunque cominciamo dalle buone notizie: la risposta al quesito la ritengo
> valida e proclamo Scossa vincitore del Quizzone n. 5!!! :-)))

Alè!!

>
> Poi cominciamo con qualche osservazione.

> Questa la tua UDF nella quale ho inserito 600000 iterazioni al posto di


> 10000 ed ho sostituito l'ugaglianza assoluta a quella limitata.
> Se leggi nella finestra immediata quante iterazioni svolge con un tasso
> "diciamo" difficile come 4,23567890123565% vedrai che raggiunge il limite di
> 600000 (dando quindi un risultato appena un po' impreciso).

Ma la mia come l'ho scritta raggiunge in sole 12 iterazioni la
precisione fino alla 13 cifra decimale, mentre TASSO di Excel sbaglia
alla grande:

tasso inserito: 4,23567890123565%
tasso mia UDF: 4,23567890123569%
TASSO(B3;B5;-B4): 4,23567890131475%


>
> La spiegazione sta nel fatto che rideterminare direttamente il nuovo tasso,
> piuttosto che l'aumento o la diminuzione di esso, NON porta a quella
> riduzione dell'ordine di grandezza sul quale si lavora che a sua volta causa
> il progressivo affinamento che conduce all'esito totalmente esatto.

Giusto.

>
> Questa sotto, lavora invece sul "delta" (positivo o negativo) da sommare al
> precedente valore provato:
> ---------------------------
> Function i(n As Long, A As Double, R As Double) As Variant
>    Dim iold As Double, itmp As Double
>    Dim Rold As Double, Rnew As Double, c As Long
>    i = "Dati errati"
>    If R <= A / n Then Exit Function
>    Rold = A / n
>    i = 0.1
>    Do Until Rnew = R
>       Rnew = A * i / (1 - (1 + i) ^ -n)
>       If Rnew = Rold Then Exit Do
>       itmp = i + (R - Rnew) / (Rnew - Rold) * (i - iold)
>       c = c + 1
>       If c > 600000 Then Exit Do  ' opzionale
>       iold = i: i = itmp: Rold = Rnew
>    Loop
>    Debug.Print c
> End Function
> ------------------------------

Interessante, grazie per lo spunto

>
> .... poi c' l'altro metodo che, pur avendo qualche problema su tassi vicini
> allo 0 (che mai si verificheranno nella realta concreta), simpaticissimo


> da scoprire e estremamente agevole da tradurre in codice.
> Se volete ve lo illustro...
>

Non pubblico il mio quiz se non ci togli questa curiosità :-)

Bye!
Scossa

r

da leggere,
6 mag 2011, 10:39:0306/05/11
a
On 6 Mag, 16:28, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel messaggionews:dc29c107-7e43-41c1...@k22g2000yqh.googlegroups.com...

> On 6 Mag, 16:11, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
> da vai ... ora sono curioso ...
> poi vai anche da qualche altra parte ... :-)
> r
>
> **********************
>
> andrei subito da un'altra parte, che ne dici?
> prrr :-))
> E.

ma LOLLLLL!
dai spara! che scossa ha minacciato ritorsioni al Quizzone :-)
r

plinius

da leggere,
6 mag 2011, 10:47:1906/05/11
a

"r" <robb...@gmail.com> ha scritto nel messaggio
news:85825c5c-b507-4963...@q21g2000vbs.googlegroups.com...

>
> ma LOLLLLL!
> dai spara! che scossa ha minacciato ritorsioni al Quizzone :-)
> r

Sparo!! :-)

Come sappiamo la formula per avere la rata di ammortamento è la seguente
R=A*i/(1-(1+i)^-n)
Da questa formula è impossibile isolare la "i" per ricavarla, ma è invece
possibile scriverla nella forma

i=R/A*(1-(1+i)^-n)

Con i dati del nostro esempio
A = 10000
n = 10
I = 0,06 (6%)
R = 1358,68
avremmo:
i=1358,68/10000*(1-(1+i)^-10)

Ora è evidente che se nella parte dx della formula inserissi al posto di "i"
il valore 0,06, la "i" a sx dell'uguale assumerebbe correttamente lo stesso
valore (0,06).
Ma che succede se inserisco invece a dx un valore a caso?
Si dimostra (ma non lo dimostreremo noi qui) che il valore assunto dalla "i"
a sx è un valore intermedio tra quello inserito e quello vero.
Da questo ne deriva che se riprendo il valore ottenuto e lo pongo di nuovo a
dx mi avvicino ulteriormente... e così via!
Quindi bastano queste poche righe:
-----------------
Function Ta(n As Long, A As Double, R As Double) As Variant
Dim i As Double, c As Long
Ta = "Dati errati"


If R <= A / n Then Exit Function

Ta = 0.1
Do Until Ta = i
i = Ta
Ta = R / A * (1 - (1 + i) ^ -n)


c = c + 1
If c > 600000 Then Exit Do 'opzionale

Loop
End Function
--------------------------------
per ottenere quanto voluto.

Unico inconveniente che se il tasso fosse prossimo allo 0 (per esempio,
0,0001%) raggiungerebbe le 600000 iterazioni.
Da ciò l'esigenza di uscire dalla routine per non bloccare il PC qualora
malauguratamente venissero dati in pasto alla funzione dati strani.
Invece con tassi normali (per esempio 6%) gli bastano 97 iterazioni.
Sfizioso? :-)))

Ciao,
E.


r

da leggere,
6 mag 2011, 10:50:4106/05/11
a
On 6 Mag, 16:47, "plinius" <punto.linea...@LEVARElibero.it> wrote:


> Sfizioso? :-)))

molto ... e molto interessante ...
ok ora vai ...
:-)
r

plinius

da leggere,
6 mag 2011, 10:55:0706/05/11
a

"r" <robb...@gmail.com> ha scritto nel messaggio
news:be3923af-73c6-4494...@m40g2000vbt.googlegroups.com...

....e chi viene con me?? :-))

E.


r

da leggere,
6 mag 2011, 11:04:3706/05/11
a
On 6 Mag, 16:55, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel messaggionews:be3923af-73c6-4494...@m40g2000vbt.googlegroups.com...

>
> > On 6 Mag, 16:47, "plinius" <punto.linea...@LEVARElibero.it> wrote:
>
> >> Sfizioso? :-)))
>
> > molto ... e molto interessante ...
> > ok ora vai ...
> > :-)
> > r
>
> ....e chi viene con me?? :-))
>
> E.

prova a chiedere a mauro ... ha bisogno d'affetto ... :-)
r

plinius

da leggere,
6 mag 2011, 11:08:0806/05/11
a

"r" <robb...@gmail.com> ha scritto nel messaggio
news:21d069f8-42b7-40fd...@e8g2000vbz.googlegroups.com...

No no, non vorrei irrompere brutalmente nei suoi "affetti"... :-))
Vado solo ch'č meglio!
E. :-)


Mauro Gamberini

da leggere,
6 mag 2011, 11:48:0206/05/11
a

>> ....e chi viene con me?? :-))
>>
>> E.
>
> prova a chiedere a mauro ... ha bisogno d'affetto ... :-)
> r

No no, non vorrei irrompere brutalmente nei suoi "affetti"... :-))

Vado solo ch'è meglio!
**********************************


Io leggo sempre tutto, SAPPIATELO!!!
;-)

plinius

da leggere,
6 mag 2011, 12:34:4806/05/11
a

"Mauro Gamberini" <maurogsc...@RIMUOVEREaliceposta.it> ha scritto nel
messaggio news:iq158g$clt$1...@dont-email.me...

Eccerto! È per quello che lo scriviamo... :-)

giovanna

da leggere,
6 mag 2011, 12:59:5906/05/11
a
paoloard ci ha detto :

>
> oddio ho quotato male... adesso chi la sente!?! :-((

:D
Paolone, ti sei salvato solo per aver preso coscienza dell'errore!
ihihih!

--
ciao
giovanna
.......................
www.riolab.org
.........................


Scossa

da leggere,
6 mag 2011, 13:19:0106/05/11
a

Ma io per proporre il Quiz n. 6 aspetto la chiusura ufficiale del 5
su:
https://sites.google.com/site/e90e50/documento-plinius/quizzone-di-excel

P.S.: dal regolamento non si evince se il quiz deve limitarsi ad un
solo problema o se può contenerne anche due tra loro in qualche modo
correlati.

Bye!
scossa

paoloard

da leggere,
6 mag 2011, 14:12:4406/05/11
a
"giovanna" ha scritto nel messaggio
news:4dc42916$0$38647$4faf...@reader1.news.tin.it...

paoloard ci ha detto :

fiuuuuuu... all'ultimo secondo la domanda di grazia è stata accolta! :-)

ciao paoloard
http://www.riolab.org

r

da leggere,
6 mag 2011, 15:50:2806/05/11
a

dai muoviti ... senza tante storie!
siamo in un Quizzone libero :-)
r

0 nuovi messaggi