Forum di Excel e VBA, per condividere esperienze e risolvere problemi su: Excel, Word, Access, Power Point, Microsoft Office, macro, Visual Basic e Visual Studio.
Ciclo for vs Overwrite di rambo424 (utente non iscritto) data: 21/02/2014 10:43:24
Ciao ragazzi!
vi pongo un quesito teorico legato all'efficienza del codice.
Sto costruendo un codice che mi riempie una tabella con alcuni dati. A tabella completata, devo riempire 3 colonne che riportano i totali di determinate quantità, già scritte in precedenza.
La domanda che vi pongo è legata alla performance del codice: posto che i totali non posso farli mentre mi riempie le colonne con le quantità parziali, secondo voi è più performante riempire a ogni giro della sub la colonna della quantità totale, scrivendo la cumulata step by step, ovvero:
sheet1.cells(1,1) = sheet1.cells(1,1) + quantità_parziale
oppure riempire tutta la colonna delle quantità parziali e solo dopo aver riempito tutti i parziali calcolarmi tutti i totali con un ciclo for che lavora su di essi?
in entrambi i casi il codice da implementare è molto semplice, mi interessava avere un parere legato all' efficacia, alla performance e alla correttezza "teorica" del codice da voi che ne capite più di me! :)
di rambo424 data: 21/02/2014 10:45:50
ps.: grazie per il contributo che mi darete, che sono certo sarà utilissimo!
di isy data: 21/02/2014 10:52:59
Cit: La domanda che vi pongo è legata alla performance del codice
Allega un esempio con le formule utilizzate sicuramente si può evitare il ciclo For Next
Quale reale necessità hai per chiedere di velocizzare il codice.
di Lucas87 data: 21/02/2014 10:56:51
cit. "posto che i totali non posso farli mentre mi riempie le colonne con le quantità parziali"
Perchè?
Puoi anche scrivere e contemporaneamente calcolarti il totale da associare a una variabile (tot=tot+nuovo valore) e alla fine riportare la variabile. Con una passata fai più operazioni.
Poi dipende da quali dati devi sommare, da come sono disposti, ma magari con qualche if o select case puoi specificarlo.
di rambo424 data: 21/02/2014 11:01:46
Potrei sicuramente valorizzare una variabile di appoggio che me li cumula.. però a quel punto mi servirebbe di dimensionarla come pubblica, perchè i parziali sono calcolati all' interno di sub diverse.
Però, si hai ragione, un'altra alternativa è una variabile di tipo Public
di Zer0Kelvin data: 24/02/2014 10:33:39
Ciao.
Premesso che quasi certamente l'utilizzo della variabile rende il codice più veloce, ci sono un paio di cose che puoi fare per rendere le operazioni sul foglio.
Inserire l'istruzione:
Application.ScreenUpdating = False
all'inizio della procedura e
Application.ScreenUpdating = True
alla fine.
Allo stesso modo, se non hai bisogno che excel effettui ricalcoli durante l'esecuzione puoi inserire:
Application.EnableEvents = False
all'inizio e
Application.EnableEvents = True
alla fine.
Se il tempo di esecuzione è davvero importante puoi procedere per tentativi, misurando il tempo impiegato. Sotto c'è l'esempio di come si può fare
Option Explicit
Sub temporizza()
Dim t As Single
t = Timer
'
' metti qui in mezzo le operazioni che vuoi "cronometrare
'
MsgBox "Tempo Impiegato = " & Timer - t
End Sub