PROBLEMA URGENTE LOGARITMO



  • PROBLEMA URGENTE LOGARITMO
    di Valvolino78 (utente non iscritto) data: 12/10/2013 10:05:05

    Buongiorno a tutti,
    ho un problema con la sintassi del logaritmo in base N di X.
    Mi occorre in un codice per lo sviluppo di un piano di ammortamento con durata ignota (il logaritmo mi occorre appunto per calcolare la durata).
    Ho razzolato a lungo sul web, ma senza soluzione.
    Vi posto di seguito i codici incriminati.
    Purtroppo non capisco dove sia l'errore.
    In sostanza, per farvi capire, ho necessità di una formula per il calcolo del logaritmo, in cui argomento e base non siano espressi in numeri (nella formula in vba), bensì con il nome di una delle variabili dichiarate, perché ovviamente non posso sapere quali saranno, volta per volta, né la base (che è pari a (1+i), dove i è il tasso di ammortamento), né l'argomento (che è R/(R-K*i), dove R è la rata e K il capitale da restituire).
    Sono arenato!
    Grazie a tutti in anticipo.
    Val
     
    PRIMA PROVA:
    Dim logvalue as double
    Dim N as double 'base del logaritmo
    Dim X as double 'argomento del logaritmo
    logvalue = log(X, N)
    
    In questo primo caso l'errore è "Numero errato di argomento o assegnazione non valida". Stesso errore anche se sostituisco le lettere con i numeri e anche se converto le lettere es. Val(X), etc..
    
    Se poi utilizzo la formula 
    logvalue = application.worksheetfunction.log(X, N)
    l'errore è "impossibile trovare la proprietà log per la classe application..."
    
    Ho trovato sul web un'altra sintassi per il calcolo del logaritmo, che è questa:
    (supponiamo che N = 3 e X = 10000)
    logvalue = log(10000) / log(3#)
    e funziona, calcola il logaritmo in base 3 di 10000.
    
    Bene direte voi...sì, ma quando vado a sostituire i numeri con le lettere, quindi
    logvalue = log(X) / log(N#)
    l'errore arriva ed è "Il carattere di dichiarazione tipo non corrisponde al tipo di dati dichiarato".
    Se allora elimino il #, l'errore diventa "chiamata di routine o argomento non validi"
    
    Chiaramente in tutti i casi ho provato Val(X), etc., ma senza alcun risultato utile.
    
    
    
    
    
     



  • di patel (utente non iscritto) data: 12/10/2013 15:19:00

    le variabili devono essere dichiarate e definite, vedrai che così funziona

     
    Sub a()
    Dim logvalue As Double
    Dim N As Double 'base del logaritmo
    Dim X As Double 'argomento del logaritmo
    N = 2
    X = 5
    logvalue = WorksheetFunction.Log(X, N)
    
    End Sub


  • il problema persiste
    di Val (utente non iscritto) data: 12/10/2013 16:00:06

    Intanto grazie della prima risposta.
    Il problema però non si risolve, quantomeno nel codice dell'ammortamento, che a questo punto per brevità allego.
    Grazie ancora a tutti.
    Val


    Il problema chiaramente è in DurataAmm.

     
    Sub PDA()
    Dim A As Double
    Dim B As Double
    Dim C As Double
    Dim yrBegBall As Single
    Dim yrEndBall As Single
    Dim ratatt As Single
    Dim intcomp As Single
    Dim intrepay As Single
    Dim outrow As Integer
    Dim rownum As Integer
    Dim outsheet As Integer
    
    Dim N As Double
    Dim X As Double
    Dim Base As Double
    Dim Valore As Double
    Dim DurataAmm As Double
    
    outrow = 5
    Rows(outrow + 3 & ":" & outrow + 1000).Select
    Selection.Clear
    A = Range("B1").Value
    B = Range("B2").Value
    C = Range("B3").Value
    If C > 0.15 Then
    MsgBox "Tasso interesse oltre soglia 15%. Prego, re-inserire il tasso"
    End If
    
    Base = (1 + C)
    N = Base
    Valore = (B / (B - A * C))
    X = Valore
    DurataAmm = WorksheetFunction.Log(X, N)
    
    yrBegBall = A
    Cells(outrow + rownum + 3, 7).NumberFormat = "€ 0,0.00"
    Cells(outrow + rownum + 3, 7).Value = A
    For rownum = 1 To B
    intcomp = yrBegBall * C
    intrepay = ratatt - intcomp
    yrEndBall = yrBegBall - intrepay
    Cells(outrow + rownum + 3, 3).HorizontalAlignment = xlCenter
    Cells(outrow + rownum + 3, 3).Value = rownum
    Cells(outrow + rownum + 3, 4).Value = ratatt
    Cells(outrow + rownum + 3, 5).Value = intcomp
    Cells(outrow + rownum + 3, 6).Value = intrepay
    Cells(outrow + rownum + 3, 7).Value = yrEndBall
    yrBegBall = yrEndBall
    Next rownum
    Range(Cells(outrow + 4, 4), Cells(outrow + DurataAmm + 3, 8)).Select
    Selection.NumberFormat = "€ 0,0.00"
    Selection.VerticalAlignment = xlCenter
    Selection.Font.Bold = False
    Selection.RowHeight = 20
    End Sub



  • di patel (utente non iscritto) data: 12/10/2013 16:02:29

    per brevità sarebbe meglio allegare il file oppure un link al file


  • allegato
    di Val (utente non iscritto) data: 12/10/2013 16:16:42

    Grazie



  • di patel (utente non iscritto) data: 12/10/2013 16:22:22

    l'allegato non c'è



  • di patel (utente non iscritto) data: 12/10/2013 16:52:39

    non è cliccabile, comunque dammi i valori delle celle B1,B2,B3
    è normale che VALORE sia negativo ?



  • di patel (utente non iscritto) data: 12/10/2013 16:55:11

    un altro modo di allegare è caricare il file su un sito di hosting tipo dropbox ... e postare il link


  • forse ho risolto io
    di Val (utente non iscritto) data: 12/10/2013 17:19:17

    Grazie!
    Mi hai dato una indicazione non da poco...cui per non so quale ragione non avevo pensato.
    Si che il valore è negativo e il log impossibile, perché la rata deve essere almeno 0,01 maggiore della quota interessi periodale, altrimenti il mutuo non sarà mai ammortizzato!
    Ci lavoro sopra e ti dico.



  • PROBLEMA URGENTE LOGARITMO
    di Val (utente non iscritto) data: 16/10/2013 11:39:27

    Ho risolto grazie alla tua preziosa indicazione sull'argomento (negativo) del logaritmo.
    Grazie!
    Val



  • di patel (utente non iscritto) data: 16/10/2013 21:00:02

    sarebbe gentile da parte tua allegare la soluzione