calcoli dendrometrici



  • calcoli dendrometrici
    di pinus (utente non iscritto) data: 23/11/2013 17:42:20

    salve gente, avrei un problema serio dopo la realizzazione di una macro. Scrivo serio perchè è quasi un mese che lavoro a questo progetto e , al momento delle verifiche dello stesso, sono incappato in alcune cose che non mi quadrano.
    Mi spiego meglio:

    Ho realizzato una macro sui calcoli dendrometrici (quelli che si usano per ricavare area basimetrica, altezza,volume, quintali, valori medi e valori ad ettaro di una data specie arborea, o di piu specie arboree).

    La macro permette, inserendo il nome della specie arborea nell intervallo A2:a3000, calcolare questi dati per ogni tipologia di specie (viene fatta la distinzione in specie perchè vengono usate formule di volume diverse a seconda della specie misurata in campo).

    Bene, provando i vari pulsanti con macro incorporate, mi sono accorto di alcune cose che non dovrebbero succedere:

    1: il calcolo del volume viene effettuato anche se inserisco un nome non presente nel campo specie, ad es se la cella a2 contiene il nome pino (specie presente nella lista) ma la cella a3 contiene il nome pippo (non presente nella lista), il volume viene calcolato anche per la voce pippo.
    La formula utilizzata per questi calcoli è presente nel codice vba sotto.

    Se ho capito bene il problema, alle macro da me create dovrei aggiungere una stringa di testo che mi permetta di ottenere i calcoli solo del testo inserito nelle formule (in questo caso le specie arboree) e non di tutte le parole possibili a patto che la prima cella (a2) contenga un nome di specie arborea inserita nella formula.
    Io ho aggiunto: If Cella = "" Then Exit For alla fine ma da quanto vedo non mi da i risultati sperati.

    2:puo essere che tale problema del volume sia dovuto alla grande quantità di "righe" scritte nella macro? Chiedo questo perche i problemi li ho con il tasto del volume e dei quintali che sono quelli che contengono piu formule.



    3.





    Spero di essere stato chiaro e spero di ricevere un aiuto valido, dopo un mese di elab. macro non vorrei veder perdere il lavoro.
    Spero che oltre alle varie formule,nelle macro, vadano inseriti anche dei comandi standard (che purtroppo non conosco) che permettono di ottenere i calcoli solo per le specie inserite nel vba e non per tutte le parole;
    scusate la lunghezza ma dopo tutto il tempo passatoci non vorrei veder perso il lavoro. GRAZIE IN ANTICIPO

     
    Dim Cella As Range, valore As Long
    For Each Cella In Range("A2:A3000")
    Uriga = Range("A" & Rows.Count).End(xlUp).Row
    For X = 2 To Uriga
    
    If Cella = "abete bianco" Then
    Cells(X, 7) = (-1.8381 + 3.7836 * 10 ^ -2 * Cells(X, 3) ^ 2 * Cells(X, 6) + 3.9934 * 10 ^ -1 * Cells(X, 3)) / 1000
    
    ElseIf Cella = "pino silvestre" Then
    Cells(X, 7) = (3.1803 + 3.9899 * 10 ^ -2 * Cells(X, 3) ^ 2 * Cells(X, 6)) / 1000
    
    'e cosi via per circa 50 specie



  • di pinus (utente non iscritto) data: 23/11/2013 17:58:25

    altro problema riscontrato

    specie 1: nella cella a2 inserisco la specie pino_clicco il pulsante_mi esce un vol, ad es di 0.5

    se dopo aver calcolato il volume della specie 1 inserisco, in a3, il nome abete (specie2), e clicco il tasto del volume, mi calcola il volume della specie2 ma.... mi cambia anche quello della specie1 precednetemente calcolato, cioè non usa piu la formula del pino ma quella dell'abete pure òla specie1 è pino...come mai?




  • di Vecchio Frac data: 23/11/2013 19:37:08

    Il titolo della discussione non è idoneo.
    Eventuali ricerche future per argomento mancheranno questa discussione con un titolo così generico... eppure è scritto chiaro nelle avvertenze all'apertura di una discussione.
    Anche "calcoli dendrometrici" sarebbe andato bene, anzi avresti stimolato la curiosità di tutti ^_^

    Nel merito, non perderai il lavoro ma sarebbe utile un piccolo file con lo scenario minimo.






  • di Pinus (utente non iscritto) data: 23/11/2013 23:46:51

    Grazie vecchio frack per le dritte, me ne scuso per gli errori..... Il lavoro, credimi, ê immane e se possibile non vorrei postarlo tutto; vorrei solo sapere se all interno delle macro ci sono dei comandi che mi evitano di ottenere i risultati scritti sopra. Ad es, se io scrivo che nella cella xy il testo deve essere aoppure b, perche se scrivo c dopo a e b mi fa lo stesso i calcoli??? Lo schema è cm quello postato sopra, sl che lw specie sn di piu, ma cambia sl il loro nome... Grazie



  • di pinus (utente non iscritto) data: 24/11/2013 10:32:26

    buongiorno, Ho allegato un piccolo file, come potrete notare qualcosa non va col calcolo dei volumi.
    Se io inserisco il nome "pippo" dopo il nome di una specie compresa nella formula, il volume viene calcolato lo stesso.
    Se io inserisco in A2 e A3 rispettivamente faggio e ontano nero, il volume sarà rispettivamente di 0.132 per tutte e due le specie (valore corretto anche se uguale).
    Se io in A2 lascio faggio e in A3 inserisco acero montano, il volume dell'acero sarà correttamente di 0.127, ma cambierà anche il volume del faggio (da 0.132 a 0.127) anche se lo avevo calcolato prima!

    come mai??



  • di pinus (utente non iscritto) data: 24/11/2013 10:42:43

    Il mio problema è che una volta fatta la formula, essa è come se non si "bloccasse", infatti se io cambio una sola specie su due ad es, anche la specie che rimane del calcolo precedente assume nuovi valori in base alla nuova specie inserita



  • di patel data: 24/11/2013 11:13:17

    la tua macro VOL è un po' contorta, prova questa
     
    Sub VOL()
    
    Dim Cella, valore As Long
    Uriga = Range("A" & Rows.Count).End(xlUp).Row
    For X = 2 To Uriga
      Cella = Cells(X, 1)
      If Cella = "" Then Exit For
      If Cella = "faggio" Then
        Cells(X, 7) = (0.81151 + 0.038965 * (Cells(X, 3) ^ 2) * Cells(X, 6)) / 1000
      ElseIf Cella = "ontano nero" Then
        Cells(X, 7) = (-2.2932 * 10 + (3.2641 * 10 ^ -2 * Cells(X, 3) ^ 2 * Cells(X, 6)) + (2.9991 * Cells(X, 3))) / 1000
      ElseIf Cella = "ontano bianco" Then
        Cells(X, 7) = (-2.2932 * 10 + (3.2641 * 10 ^ -2 * Cells(X, 3) ^ 2 * Cells(X, 6)) + (2.9991 * Cells(X, 3))) / 1000
      ElseIf Cella = "acero montano" Then
        Cells(X, 7) = (1.6905 + 3.7082 * 0.01 * Cells(X, 3) ^ 2 * Cells(X, 6)) / 1000
      End If
    Next
    End Sub
    






  • di pinus (utente non iscritto) data: 24/11/2013 11:27:42

    patel ti ringrazio infinitamente. La macro sembra andare ora benissimo, pomeriggio o domani pero la testo con piu dati per vedere cm si comporta.
    Hai scritto che la mia macro è un po contorta, mi potresti spiegare il perchè? e poi perchè il mio codice vba dava quegli errori che non mi hanno fatto dormire stanotte mentre la tua sembra andare bene?
    grazie di cuore



  • di patel data: 24/11/2013 11:42:58

    tu hai usato 2 cicli for next, invece ne basta uno solo, per quello ho detto che è contorta e sicuramente porta ad errori.





  • di pinus (utente non iscritto) data: 24/11/2013 11:57:31

    Ok capito. X Ora ho sostituito al mio codice iniziale le prime righe che hai scritto tu e sembra vada bene.
    Vista la tua gentilezza (Grazie x il cambio titolo )ne approfitto x chiedere info su un buon manuale x creare macro in exceL (sempre se é possibile fare pubblicità qua sul forum a libri Etc) titolo autore Etc. Grazie



  • di patel data: 24/11/2013 12:17:41

    cercando con Google si trova tutto e di più, ti allego qualche link, io ho imparato quello che so dai forum.
    homeandlearn.org/index.html
    mrexcel.com/archive/VBA/index.html
    lucabenetti.altervista.org/Codice.htm
    marcosroom.it/Didatticando/Excel/Default.aspx
    maurogsc.eu/





  • di pinus (utente non iscritto) data: 26/11/2013 11:50:53

    grazie patel, darò un'occhiata appena possibile!