2016-08-06 28 views
1

Ich bin ein R-Programmierer, aber versuche VBA zum ersten Mal. Ich habe eine ziemlich einfache Populationsprojektion basierend auf einer Reihe von zufällig ausgewählten Geburts- und Überlebenswerten. Ich habe Populationswerte für die Jahre 1 bis 20 in den Zellen BC4: BC23 in Sheet1 vorhergesagt. Bei jeder Aktualisierung ändern sich die Werte. Ich möchte 100 mal auffrischen und jeden Populationswert in Sheet2 speichern (100 Spalten mit 20 Werten).Neu berechnen (aktualisieren) und jedes Ergebnis in einem anderen Blatt speichern

Basierend auf meiner Internet-Suche, scheint es, dass eine Kombination aus einer Schleife und EnableCalculation eine brauchbare VBA-Ansatz dafür ist. Ich habe verschiedene Codierungsansätze (Application.EnableEvents, CalculateManyTimes, usw.) ohne Glück versucht. Sicher wurde diese Art von Frage vorher gestellt, aber ich konnte sie nicht finden. Irgendwelche Tipps würden geschätzt. Vielen Dank.

+0

Einfach fragen: so am Ende werden Sie über 100 Blätter mit Daten gefüllt haben. Wie möchten Sie diese Daten überprüfen/analysieren? Wäre es nicht besser, alle Daten in einem Blatt zu speichern und dann einen Pivot-Tisch darauf zu legen? Natürlich müssten Sie dann Ihren Daten eine zusätzliche Spalte hinzufügen, die etwas wie 'Calculation00',' Calculation01', 'Calculation02',' Calculation03' usw. enthält. Alternativ können Sie sich auch SQL Server ansehen (falls der Datenmenge erhöht sich weiter) SQL Server 2016 enthält jetzt "R". – Ralph

+0

Ja, alle Simulationen würden innerhalb von 1 Blatt liegen (1 Spalte für jede Simulation für insgesamt 100 Spalten). Ich denke nicht, dass eine Spaltenüberschrift notwendig ist, weil ich nur die Trends (Jahre 1 bis 20) grafisch darstellen werde. – ecologist55

Antwort

1

Der Schlüssel ist Application.CalculateFull so könnte der Code sein:

Sub CalculateAndSave() 
    Dim Ws As Worksheet 
    Set Ws = Worksheets(2) 
    For i = 1 To 100 
     Application.CalculateFull 
     Ws.Range(Ws.Cells(4, i), Ws.Cells(23, i)) = Sheets(1).Range("BC4:BC23").Value 
    Next i 
End Sub 
+0

Perfekt! Vielen Dank. – ecologist55