Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1940to1944
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
NORMINV aus Array berechnen
23.08.2023 21:01:10
Frank
Guten Abend an Alle,

ich frage mich gerade, ob es möglich ist, die Funktion NORMINV auf ein Array, welches in VBA definiert und befüllt wird, zu beziehen. Ich verwende diese Formel aktuell in Excel.
=NORMINV(HG4;TEILERGEBNIS(101;$AE$3:$AN$10001);TEILERGEBNIS(107;$AE$3:$AN$10001))

...was dazu führt, dass ich meine Daten von VBA immer erst einmal in Excel einfügen muss und somit die Ausführung des Programms sehr langsam wird. Ich arbeite auch mit Screenupdating False und schalte die Berechnung verschiedener Datenblätter aus. Dennoch bin ich mit der Performance nicht zufrieden. Deshalb wollte ich das Array in VBA auslesen und das entsprechende Quantil ebenfalls unter VBA mit Hilfe der Function NORMINV berechnen lassen. Ich hoffe es hat jemand einen hilfreichen Ansatz für mich und ich mein Problem verständlich erläutert.

Vielen Dank und viele Grüße,
Frank

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: NORMINV aus Array berechnen
23.08.2023 21:49:45
Alwin Weisangler
Hallo Frank,

=NORMINV() geht mit: Application.Norm_Inv
=TEILERGEBNIS() geht mit: Application.Subtotal
Falls es nicht weiter hilft, lade eine Datei mit zur Ausführung dieser Formel nötigen Werten in den Zellen/Zellbereichen.

Gruß Uwe
AW: NORMINV aus Array berechnen
24.08.2023 10:59:43
daniel
Hi
Teilergebnis kann nicht auf Arrays angewendet werden.
Die Aufgabe von Teilergebnis ist, ausgeblendete Zeilen aus der Berechnung auszuschließen und ausgeblendete Zeilen gibt es nur bei Excelzellen und nicht bei Arrays. Daher benötigt Teilergebnis Excelzellen als Eingabe und kann mit Arrays nichts anfangen.
Verwende für Arrays doch einfach die dazugehörigen Original-Funktionen statt Teilergebnis
101 = Mittelwert = Worksheetfunction.Average
107 = STABW.S = Worksheetfunction.StDev_S

Gruß Daniel

Anzeige
AW: NORMINV aus Array berechnen
24.08.2023 11:29:13
Frank
Hallo Daniel,

vielen Dank für deine Nachricht. Ja, da stimme ich dir zu in Arrays gibt es keine ausgeblendeten Zeilen. Ich habe es in meiner Beispieldatei so dargestellt also Mittelwert und STABW. Ich kann mir über eine Schleife den Mittelwert des Arrays ermitteln und dann in einer weiteren Schleife die Summe (xi - Mittelwert)^2 und die (Anzahl-1) zählen. Und am Ende daraus die Wurzel ziehen.
Mir geht es um die Syntax, sprich wie ich mit Worksheetfunction.Average oder Worksheetfunction.StDev_S auf das Array zugreife, ohne das ich mir das selbst programmiere. Oder ist das nicht möglich? Also so zum Beispiel: Worksheetfunction.Average(Arr(1,1):Arr(10,10))

Vielen Dank und viele Grüße
Frank
Anzeige
AW: NORMINV aus Array berechnen
24.08.2023 11:49:13
daniel
Worksheetfunction.Average(Arr(1,1):Arr(10,10))

was soll denn das sein?

wenn Arr(1, 1) und Arr(10, 10) zwei Einzelwerte eines Arrays sein sollen, dann müsstest du das Komma dazwischen setzen und dann bekommst du den Mittelwert von diesen zwei Einzelwerten.

wenn Arr ein größeres Array ist mit mehr als 10 Zeilen oder mehr als 10 Spalten und du möchtest nur diesen Ausschnitt mit 100 Werten betrachten, dann muss man sagen, dass VBA das nicht kann.
Das funktioniert mit Excelzellen (Range(Cells(1, 1), Cells(10, 10)) aber nicht mit Arrays.
ich wüsste jetzt keinen Befehl der von einem Array einen Ausschnitt bilden kann.
Einzelne Zeilen oder Spalten kann man ggf über INDEX herauslösen, aber nicht solche Teilabschnitte über mehrere Zeilen und Spalten.


Gruß Daniel
Anzeige
AW: NORMINV aus Array berechnen
24.08.2023 11:56:52
Frank
Hallo Daniel,

das war ein Beispiel. Ich wollte damit zeigen das ich von dem Bereich von Arr(1,1) bis Arr(10,10) den Mittelwert bilden möchte. So wie wenn ich in Excel sagen würde Mittelwert(A1:J10). Das wollte ich auf VBA übertragen. Aber offensichtlich geht das nicht. Das mein Beispiel keinen Sinn macht war mir bewusst. Deshalb hatte ich nach der Syntax gefragt. Ich danke dir für deine hilfreiche Unterstützung und wünsche dir noch einen schönen Tag.

Viele Grüße
Frank
AW: NORMINV aus Array berechnen
24.08.2023 08:20:07
Frank
Guten Morgen Uwe,

vielen Dank für deine Antwort. Mein Problem ist, dass ich nicht weiß wie ich mit den Formeln auf ein in VBA definiertes Array zugreift?

Vielen Dank und viele Grüße,
Frank
Anzeige
AW: NORMINV aus Array berechnen
24.08.2023 10:28:59
Frank
Hallo Uwe,

wie ich die Daten in das Array aus Excel in einer doppelten Schleife einlese, das weiß ich. Meine Frage zielt eher darauf ab, wie ich dann die Function in VBA anwende, sprich wie ich das Array in die Formel einbinde. Application.Norm_Inv(0,05, Application.Average(Array(,i,j)), Application.St_Dev_S(Array(,i,j)) Also mir geht es um das Array (die Syntax) also von Array(1,1) bis bspw. Array(10,10). Ich könnte mir den Durchschnitt und die Standardabweichung auch selbst programmieren. Ich möchte den Wert der in Zelle J3 steht rein in VBA aus dem eingelesenen Array errechnen. Ich versuche das mal, indem ich den Durchschnitt und die Standardabweichung selbst über eine Schleife errechne.

https://www.herber.de/bbs/user/162457.xlsm

Vielen Dank und viele Grüße
Frank
Anzeige
AW: NORMINV aus Array berechnen
24.08.2023 11:14:21
Alwin Weisangler
entsprechend deiner Beispieldatei so:


Sub WerteInArray()
Dim arr(3), i&
With Tabelle1
arr(0) = Application.Subtotal(101, Range("A1:G65"))
arr(1) = WorksheetFunction.StDev(.Range("A1:G65"))
arr(2) = WorksheetFunction.Norm_Inv(0.05, arr(0), arr(1))
End With
End Sub

arr(2) enthalt den gewünschten Ausgabewert.
Da die Beispieltabelle immer noch nicht den tatsächlichen Aufbau entspricht, macht es wenig Sinn weitere Vermutungen anzustellen.

Gruß Uwe
AW: NORMINV aus Array berechnen
24.08.2023 08:53:44
Alwin Weisangler
so wie man mit einer Schleife der Werte aus einer Zelle in Array liest macht man es mit der Ausgabe der Formel.
z.B. so (deine Anwendung wird andere Zugriffe der Schleife brauchen):


Sub WerteInArray()
Dim arr(), i&
With Tabelle1
For i = 1 To 100 ' statt 100 besser letzte Zeile der Spalte mit Wert bestimmen
ReDim Preserve arr(1 To i)
arr(i)= deine Formel mit den entsprechend angepassten Zellkoordinaten
Next i
End With
End Sub

Komplizierter wird es nicht.
Da du keine Datei mit Demodaten hochladen willst, wird dir sicherlich keiner eine brauchbarere Auskunft geben können.
Ich lade dir eine Demodatei hoch - in 2 min erzeugt (so einfach geht das).
https://www.herber.de/bbs/user/162453.xlsm

Gruß Uwe
Anzeige

Links zu Excel-Dialogen

Anzeige

Infobox zum Thema

EXCEL - NORMINV aus Array berechnen


Inhaltsverzeichnis


Die Fragestellung


Du möchtest die inverse Normalverteilungsfunktion (NORMINV) für eine Reihe von Wahrscheinlichkeiten aus einem Array in Excel mit VBA berechnen.


Erläuterung des Problems {#erläuterung-des-problems}


Die inverse Normalverteilungsfunktion wird verwendet, um den Wert zu finden, dessen kumulative Verteilungsfunktion eine bestimmte Wahrscheinlichkeit hat. Dies ist nützlich in der Statistik und bei der Datenanalyse.


Lösung des Problems {#lösung-des-problems}


In VBA kannst du die Excel-Funktion Application.WorksheetFunction.Norm_Inv verwenden, um die inverse Normalverteilung für ein Array von Wahrscheinlichkeiten zu berechnen. Hier ist ein Beispielcode:

Sub CalculateNormInv()
    Dim probabilities As Variant
    Dim results() As Double
    Dim i As Long
    Dim mean As Double
    Dim stdDev As Double

    ' Beispielwerte für Mittelwert und Standardabweichung
    mean = 0
    stdDev = 1

    ' Ein Beispielarray von Wahrscheinlichkeiten
    probabilities = Array(0.05, 0.25, 0.5, 0.75, 0.95)

    ' Ergebnisarray initialisieren
    ReDim results(LBound(probabilities) To UBound(probabilities))

    ' Berechnung der inversen Normalverteilung für jede Wahrscheinlichkeit
    For i = LBound(probabilities) To UBound(probabilities)
        results(i) = Application.WorksheetFunction.Norm_Inv(probabilities(i), mean, stdDev)
        Debug.Print "NORMINV für Wahrscheinlichkeit " & probabilities(i) & ": " & results(i)
    Next i
End Sub

Dieser Code berechnet NORMINV für jedes Element im probabilities Array und speichert die Ergebnisse im results Array. Die Ergebnisse werden auch im Immediate-Fenster ausgegeben.


Anwendungsbeispiele aus der Praxis


  • Risikomanagement: Berechnung von Schwellenwerten für finanzielle Risiken.
  • Statistische Analyse: Bestimmung von Quantilen einer Normalverteilung.

Tipps


  • Stelle sicher, dass die Wahrscheinlichkeiten im Array zwischen 0 und 1 liegen.
  • Die Funktion Norm_Inv kann Fehler zurückgeben, wenn ungültige Argumente übergeben werden, also füge ggf. Fehlerbehandlung hinzu.

Verwandte Themenbereiche


  • Statistische Funktionen in Excel
  • Datenanalyse mit VBA
  • Wahrscheinlichkeitsrechnung

Zusammenfassung


Die Berechnung der inversen Normalverteilungsfunktion für ein Array von Wahrscheinlichkeiten in VBA kann effizient mit der Application.WorksheetFunction.Norm_Inv Methode durchgeführt werden. Der obige Code zeigt, wie du ein Array von Wahrscheinlichkeiten durchlaufen und die entsprechenden NORMINV Werte berechnen kannst. Diese Methode ist besonders nützlich in der statistischen Datenanalyse und im Risikomanagement.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige