Monte Carlo Simulation
30.01.2018 19:32:17
Nico
ich probiere mich derzeit an einer Monte Carlo Simulation für Immobilienprojektentwicklungen.
Das funktioniert soweit auch ganz gut, allerdings bin ich auf ein kleines Problem gestoßen, welches ich nicht ganz verstehe.
Die Simulation der Werte Baukosten, Verkaufserlös und Bauphase funktioniert einwandfrei. Lediglich bei den Finanzierungskosten gibt es Probleme. Hier zeigt er mir dann die Fehlermeldung, dass die Average-Eigenschaft des WorksheetFunction-Objektes nicht zugeordnet werden kann. Ich habe eigentlich alles geprüft, komme aber einfach nicht weiter.
Vielen Dank schon einmal!
Hier der betroffene Teil, den ich aktuell verwende.
Sub MonteCarlo()
Application.ScreenUpdating = False
'Variablen definieren
Dim Baukosten() As Variant
Dim Verkaufserlös() As Variant
Dim Bauphase() As Variant
Dim Finanzierungskosten() As Variant
Dim Anzahl As Double
Dim i As Double
'Anzahl der Wiederholungen einlesen
Anzahl = Worksheets("Risikoanalyse").Range("C76")
'Arraygröße definieren
ReDim Baukosten(1 To Anzahl) As Variant
ReDim Verkaufserlös(1 To Anzahl) As Variant
ReDim Bauphase(1 To Anzahl) As Variant
ReDim Finanzierungskosten(1 To Anzahl) As Variant
'Simulation der Zufallswerte
For i = 1 To Anzahl
Baukosten(i) = (Worksheets("Stammdaten").Range("J41") - Worksheets("Stammdaten").Range("J34") + ((WorksheetFunction.NormInv(Rnd(), Worksheets("Stammdaten").Range("I34"), Worksheets("Risikoanalyse").Range("E115"))) * Worksheets("Stammdaten").Range("J19"))) * (1 + Worksheets("Stammdaten").Range("I43"))
Verkaufserlös(i) = (WorksheetFunction.NormInv(Rnd(), Worksheets("Stammdaten").Range("E42"), Worksheets("Risikoanalyse").Range("J115")) * Worksheets("Stammdaten").Range("E41")) + WorksheetFunction.Sum(Worksheets("Stammdaten").Range("E43:E44"))
Bauphase(i) = WorksheetFunction.NormInv(Rnd(), Worksheets("Stammdaten").Range("I59"), Worksheets("Risikoanalyse").Range("E138"))
Finanzierungskosten(i) = (Worksheets("Stammdaten").Range("E37") * (1 + WorksheetFunction.NormInv(Rnd(), Worksheets("Stammdaten").Range("J51"), Worksheets("Risikoanalyse").Range("J138"))) ^ (Worksheets("Stammdaten").Range("I57") + Bauphase(i))) - Worksheets("Stammdaten").Range("E37")
Next
'Werte aus Array berechnen
Range("E113") = WorksheetFunction.Average(Baukosten)
Range("E114") = WorksheetFunction.Median(Baukosten)
Range("E117") = WorksheetFunction.Min(Baukosten)
Range("E118") = WorksheetFunction.Max(Baukosten)
Range("J113") = WorksheetFunction.Average(Verkaufserlös)
Range("J114") = WorksheetFunction.Median(Verkaufserlös)
Range("J117") = WorksheetFunction.Max(Verkaufserlös)
Range("J118") = WorksheetFunction.Min(Verkaufserlös)
Range("E136") = WorksheetFunction.Average(Bauphase)
Range("E137") = WorksheetFunction.Median(Bauphase)
Range("E140") = WorksheetFunction.Min(Bauphase)
Range("E141") = WorksheetFunction.Max(Bauphase)
Range("J136") = WorksheetFunction.Average(Finanzierungskosten)
Range("J137") = WorksheetFunction.Median(Finanzierungskosten)
Range("J140") = WorksheetFunction.Min(Finanzierungskosten)
Range("J141") = WorksheetFunction.Max(Finanzierungskosten))