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?

Anmelden und Beitrag in meinem Produkt lesen


Meistgelesene beiträge