salvare esito replicazione
Hai un problema con Excel? 
salvare esito replicazione
di nanetta (utente non iscritto) data: 28/04/2014 13:56:00
salve a tutti; mi sto cimentando per la prima volta con la scrittura delle macro in vba e ne so veramente poco. sto simulando un percorso di prezzi che cambia ad ogni ricalcolo poiché nella formula vi è la funzione casuale(). Ciò che vorrei fare è - tramite una macro - fare 1000 volte il ricalcolo di questi prezzi e che venga creata una colonna di valori riportante l'esito di ogni simulazione. (per essere più chiara faccio un esempio: con l'ausilio della funzione casuale() stimo il possibile valore tra 10 giorni - quindi ho una colonna di 10 valori di cui mi interessa "registrare" il decimo; voglio che excel ricalcoli 1000 volte questi 10 valori e che per ogni ricalcolo registri su un'altra colonna il 10mo valore ottenuto, in modo da ottenere - una volta eseguita la macro - un'altra colonna di 1000 valori fissi riportanti gli esiti delle mie simulazioni)
da un file simile a quello che devo fare io avevo copiato questo codice - che sul file originale era funzionante - cambiando i riferimenti delle celle ma attivando la macro così scritta si generano solo i 1000 ricalcoli ma non mi vengono registrati (quindi copiati e incollati) i 1000 esiti. potete darmi una mano? grazie mille!
Sub Replicaz()
Dim repl(1000, 1)
Application.DisplayStatusBar = True
num_repl = Range("j3")
Range("j4:j1003").Clear
For i = 1 To num_repl
Application.StatusBar = "Simulazione " & i
repl(i, 1) = Range("g243")
Calculate
Next i
Range(Cells(4, 10), Cells(1003, 10)) = repl
Application.StatusBar = False
End Sub |
di lepat (utente non iscritto) data: 28/04/2014 14:05:59
allega un file di esempio per testare la macro
di nanetta (utente non iscritto) data: 28/04/2014 14:39:49
fatto!
di Grograman data: 28/04/2014 14:53:59
Ciao!
Non entro nel merito delle formule perchè non le conosco quindi do per certo siano già ottimizzate!
Non vedo però la necessita di ricorrere ad un array in questo caso.
Potresti semplicemente fare un ciclo che scrive il risultato della tua formula (G243).
Inoltre consiglio di abituarti fin da subito ad utilizzare la dichiarazione obbligatoria delle variabili (Option Explicit) e di togliere le operazioni "univoche" fuori dai cicli.
Ciò detto, prova questo:
Option Explicit
Sub Replicaz()
Dim num_repl As Long, i As Long
Application.DisplayStatusBar = True
num_repl = Range("j3")
i = Range("I" & Rows.Count).End(xlUp).Row 'ultima cella piena di colonna I
Range("I4:J" & i).Clear ' 'puliamo fino a ultima ricorrenza calcolata e puliamo anche numero iterazione
Application.StatusBar = "Simulazione " & i 'togliamolo dal ciclo
For i = 1 To num_repl
Range("J" & i + 3) = Range("g243").Value 'valore casuale in J
Range("I" & i + 3) = i 'numero iterazine in I
Next i
Application.StatusBar = False
End Sub
|
di lepat (utente non iscritto) data: 28/04/2014 15:01:57
secondo me non vale la pena utilizzare una matrice visto che usi calculate, quindi puoi modificare il codice così
Sub Replicaz()
num_repl = Range("j3")
Range("j4:j1003").Clear
For i = 1 To num_repl
Cells(i + 3, 10) = Range("g243")
Calculate
Next i
End Sub |
di nanetta (utente non iscritto) data: 28/04/2014 15:53:01
grazie a tutti! siete dei grandi! non so come ringraziarvi!
Vuoi Approfondire?