Die Ablaufsteuerung erfolgt über ein Makro, wie schon im einfachen Fall skizziert. Der Ablauf ist der prozeduralen Verarbeitung sehr ähnlich. Hier das Makro:
Sub calcRModell() Application.Calculation = xlCalculationManual x = Application.Run("BERT.Call", "startTimer") x = Application.Run("R.Reval", "mcs <<- NULL; " & IIf(Range("seed").Value, "", "#") & " set.seed(100)") For i = 1 To ActiveSheet.Range("Iterationen") ActiveSheet.Range("Calculate").Calculate x = Application.Run("BERT.Call", "collect", ActiveSheet.Range("result").Value) Next Range("Time") = Application.Run("BERT.Call", "endTimer2") 'Zeitmessung Application.CalculateFull End Sub |
Die Funktionsweise
BERT-Funktionen können auch aus VBA heraus aufgerufen werden. Dazu kann die VBA-Funktion Application.run(<R-Funktion für Excel>) oder aber die BERT-spezifische Variante Application.run("BERT.Call",…) verwendet werden. Im letzteren Fall wird auf das Präfix "R" verzichtet.
Die Ergebniswerte müssen hinsichtlich der Häufigkeit ausgewertet werden. Dies könnte wieder in Excel erfolgen. Interessanter ist es aber, dies in R zu speichern, um Excel schlanker zu halten und die komfortablen Auswertungsmöglichkeiten von R zu nutzen. Collect() ist eine selbsterstellte Funktion, die die Ergebnisse der Simulation speichert:
collect <- function(x) {mcs <<- c(mcs,x);x} |
mcs ist der Ergebnisvektor, der bei jedem Durchlauf um ein Element verlängert wird. Der Vektor kann in Excel wie folgt adressiert werden:
= R.E.eval("quantile(mcs,0.05) |
Das ist nur ein Ausschnitt aus dem Produkt Controlling Office. Sie wollen mehr?
Jetzt kostenlos 4 Wochen testen
Anmelden und Beitrag in meinem Produkt lesen