Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Generierung einer Normalverteilung in VBA

Forumthread: Generierung einer Normalverteilung in VBA

Generierung einer Normalverteilung in VBA
21.07.2004 14:13:42
Goto
Hallo zusammen,
Möchte eine Monte-Carlo Simulation in VBA programmieren, dazu die Frage: Wie zieht man in einem Makro Werte aus einer Normalverteilung?
Is mir klar dass man direkt in einer Excel-Tabelle mit --&gt~f~ Extras ~f~--&gt~f~ Analysefunktionen ~f~--&gt Zufallszahlengenerierung Zufallszahlen direkt in einem Tabellenblatt generieren kann. Hier sollte die Zufallszahlengenerierung aber im Hintergrund ablaufen da wesentlich schneller.
Konkretes Beispiel:
Habe eine Normalverteilung mit einem Mittelwert von 0,0844 und einer Standardabweichung von 0,3942. Aus dieser Normalverteilung möchte ich 100.000 mal ziehen und diese Werte in einem Datenfeld speichern. Für jeden Tip wie diese Zufallszahlengenerierung funktionieren könnte bin ich dankbar.
Dim feld()
anzahldaten = 100000
ReDim feld(1 To anzahldaten)
For i = 1 To anzahldaten
Zufallszahl = 'Ziehung aus Normalverteilung (0.0852, 0.3942), hier sollte die Generierung stattfinden'
feld(i) = Zufallszahl
Next i
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Generierung einer Normalverteilung in VBA
B.
Hallo Goto (schöner Name)
Unter goooooogle gibt es bestimmt was bei Eingabe von "Monte-Carlo Simulation".
In diesem Forum findest Du aber auch links unter Recherche bei Eingabe von
"Normalverteilung" reichlich Links.
Gruß
Beate
AW: Glaube Lösung gefunden zu haben
22.07.2004 09:18:17
goto
... und zwar in einem alten Forumsbeitrag (Danke B.Ate für den Tip)
In Zellen scheint die Normalverteilung folgendermaßen reproduzierbar zu sein
=NORMINV(ZUFALLSZAHL();0;1) wobei 0 für den Mittelwert und 1 für die Standardabweichung steht. Die gleichen Formeln sollten jau auch in VBA verwendet werden können
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Normalverteilung in VBA generieren


Schritt-für-Schritt-Anleitung

Um eine Normalverteilung in VBA zu generieren, folge diesen Schritten:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Neues Modul einfügen: Klicke mit der rechten Maustaste auf dein Projekt im Projektfenster, wähle „Einfügen“ und dann „Modul“.

  3. Code eingeben: Füge folgenden Code in das Modul ein:

    Sub NormalverteilungGenerieren()
       Dim feld() As Double
       Dim anzahldaten As Long
       Dim i As Long
       Dim Mittelwert As Double
       Dim StdAbw As Double
    
       anzahldaten = 100000
       ReDim feld(1 To anzahldaten)
       Mittelwert = 0.0844
       StdAbw = 0.3942
    
       For i = 1 To anzahldaten
           ' Ziehung aus Normalverteilung
           feld(i) = Application.WorksheetFunction.NormInv(Rnd(), Mittelwert, StdAbw)
       Next i
    
       ' Optional: Werte in ein Arbeitsblatt schreiben
       For i = 1 To anzahldaten
           Cells(i, 1).Value = feld(i)
       Next i
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über ALT + F8 aus.


Häufige Fehler und Lösungen

  • Fehler: „Typ nicht definiert“
    Lösung: Stelle sicher, dass Du die richtigen Variablen in VBA definiert hast. Überprüfe die Schreibweise der Variablen.

  • Fehler: „Bereichsfehler“
    Lösung: Achte darauf, dass Du genügend Speicherplatz für das Array reserviert hast und dass der Index innerhalb der definierten Grenzen liegt.

  • Zufallszahlen sind nicht normalverteilt
    Lösung: Stelle sicher, dass Du die NormInv-Funktion korrekt verwendest und dass die Werte für Mittelwert und Standardabweichung richtig eingegeben sind.


Alternative Methoden

Es gibt auch andere Möglichkeiten, eine Normalverteilung in Excel zu generieren, ohne VBA zu verwenden:

  1. Excel-Funktion verwenden: Du kannst die Funktion =NORMINV(ZUFALLSZAHL(); Mittelwert; Standardabweichung) direkt in eine Zelle eingeben. Dies funktioniert gut für kleinere Datensätze.

  2. Datenanalyse-Toolpaket: Aktiviere das Datenanalyse-Toolpaket in Excel, um Zufallszahlen zu generieren, die einer Normalverteilung folgen. Gehe zu DatenDatenanalyseZufallszahlen.


Praktische Beispiele

Hier ein einfaches Beispiel, um die Normalverteilung in Excel zu visualisieren:

  1. Verwende die oben genannte Formel =NORMINV(ZUFALLSZAHL(); 0.0844; 0.3942) in Zelle A1.
  2. Ziehe die Formel bis A100000, um 100.000 Werte zu generieren.
  3. Erstelle ein Histogramm der generierten Werte, um die Normalverteilung zu visualisieren.

Tipps für Profis

  • Optimierung des Codes: Du kannst die Application.ScreenUpdating- und Application.Calculation-Einstellungen deaktivieren, um die Ausführungsgeschwindigkeit des Makros zu erhöhen.

  • Zufallszahlengenerator: Um sicherzustellen, dass die Zufallszahlen wirklich zufällig sind, verwende Randomize am Anfang Deiner Subroutine.

  • Daten exportieren: Überlege, ob Du die generierten Daten in eine CSV-Datei exportieren möchtest, um sie in anderen Programmen weiter zu nutzen.


FAQ: Häufige Fragen

1. Wie kann ich die Anzahl der Zufallszahlen ändern?
Du kannst die Variable anzahldaten im Code auf die gewünschte Anzahl ändern.

2. Funktioniert dieser Ansatz in allen Excel-Versionen?
Ja, die beschriebenen Methoden sind in den meisten modernen Excel-Versionen anwendbar, solange VBA unterstützt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige