salvare esito replicazione



  • 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!