(26.06.2019, 14:15)Fennek schrieb: die Poisson-Verteilung benötigt 2 Werte: x und m (Mittelwert)
Im Beispiel ist m willkürlich auf "5" gesetzt, kann aber leicht durch eine Schleife ersetzt werden.
Verteilungen werden mit "false" oder "true" nicht / kumuliert gerechnet. Es war mir nicht klar, was benötigt wird.
Facit: mit 2 Schleifen für x und m läßt sich alles ohne Hilfstabellen berechnen.
Ich habe ja eine Poisson-Matrix, müsste ich dann nicht
For x = 1 To 7 Cells(x, 1) = WorksheetFunction.Poisson_Dist(x, m, False) Cells(1, x) = WorksheetFunction.Poisson_Dist(x, m, False) Next x
stattdessen schreiben oder verstehe ich den Code nicht? Andernfalls müsste ich in meinen ersten beiden Spalten jeweils Werte von 1 bis 7 stehen haben müssen (bei Cells (x,1) und Cells (x,2))?
Und m müsste ja für zwei benachbarte Spalten "runterlaufen". Mit
For m = 1 To 25386 Cells(m, 1) = WorksheetFunction.Poisson_Dist(x, m, False) Cells(m, 2) = WorksheetFunction.Poisson_Dist(x, m, False) Next m
komme ich ja nicht weiter oder?
Werden die Ergebnisse bei der Funktion Poisson_Dist denn miteinander multipliziert? In meiner Matrix werden ja für jedes m-Paar die Verteilungen multipliziert, also z.B. wenn in der ersten Zeile der beiden Spalten mit den Mittelwerte m1=1.3 m2=1.8 dann Poisson(x,1.3,False)*Poisson(x,1.8,False) wobei die Multiplikation für jede Kombination von x durchgeführt werden soll. Aus der gesamten Verteilung muss ja dann jeweils für ein x-Übergewicht in der linken Spalte, ein x-Gleichgewicht und ein x-Übergewicht in der obersten Zeile der Matrix die Summe gebildet werden, sodass schlussendlich drei Ergebnisse ausgespuckt werden die natürlich kumuliert 1 ergeben.
Diese drei Ergebnisse sollen dann für jede Zeile der beiden Spalten mit den Mittelwerten in drei benachbarten Zellen angezeigt werden. Impliziert das dein Code bereits? Ich blick einfach nicht durch
ich habe mit viel-zu-viel Worten gezeigt, wie einfach eine Poisson-Verteilung mit VBA erstellt werden kann. ABER: Aus dem Ausgangspost habe ich dein Ziel nicht verstanden. Das Beispiel mit der Addition 3 Werte ist für mich nicht verständlich.
Aber mit VBA 3 Poisson-Wahrscheinlichkeiten zu ermitteln und zu addieren, ...
26.06.2019, 18:28 (Dieser Beitrag wurde zuletzt bearbeitet: 26.06.2019, 18:28 von exblow375.)
(26.06.2019, 17:03)Fennek schrieb: Hallo,
ich habe mit viel-zu-viel Worten gezeigt, wie einfach eine Poisson-Verteilung mit VBA erstellt werden kann. ABER: Aus dem Ausgangspost habe ich dein Ziel nicht verstanden. Das Beispiel mit der Addition 3 Werte ist für mich nicht verständlich.
Aber mit VBA 3 Poisson-Wahrscheinlichkeiten zu ermitteln und zu addieren, ...
mfg
Ich habe nochmal eine funktionierende Beispieldatei hochgeladen. Meine m-Werte stehen in den Spalten A:B, meine Poisson-Matrix beinhaltet in F2:F7 und 1G:1L die x-Werte. Innerhalb der Matrix G2:L7 werden die Werte von Poisson für jedes x multipliziert. Anschließend wird die hellgrüne Fläche in G9 aufsummiert, die orangene Fläche in G10 und die dunkelgrüne Fläche in I9. Das erst m-Wertepaar in A2:B2 liefert dann das Ergebnis in G9:I9 was in den Spalten C:E dann für jede Zeile eingetragen werden soll.
26.06.2019, 22:37 (Dieser Beitrag wurde zuletzt bearbeitet: 27.06.2019, 06:36 von WillWissen.
Bearbeitungsgrund: Formatierung
)
(26.06.2019, 19:52)Fennek schrieb: Hallo,
ohne Wissen, was das zeigen soll:
Der Code iteriert alle Werte der Spalten A:B in die Tabelle "G2:L7":
Code:
Sub F_en() Dim rng As Range Set rng = Range("G2:L7")
For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row rng.Replace "$" & i - 1, "$" & i '<<<<<<< Auswertung >>>>>>>> Next i
Set rng = Nothing End Sub
mfg
Vielen Dank!!! Sehr nett. Es ist verblüffend wie elegant man das Problem lösen kann, so elegant, dass ich ich mich über einige Punkte wundere. Ich möchte ja dazu lernen: Woher weißt ich denn das der Code beide Werte aus Spalte A und Spalte B in der Matrix ersetzt? For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row liest es sich für mich als ob nur in Spalte 1 iteriert werden würde? Außerdem ist die Funktion Replace für mich in dieser Form schleierhaft: Warum wird hier "$"& verwendet...das man i-1 durch i ersetzen soll klingt natürlich logisch aber was sagt mir "$"&?
Damit wird "nur" in Spalte A geschaut, wie viele Zeilen zu bearbeiten sind. Bei A ist man anscheinend auf der sicheren Seite. Man könnte auch in den Spalten von G bis L schauen, wo da am meisten steht …
In Deinen Formeln verwendest Du absolute Bezüge für die Adressierung, also z.B. $B$2. Die Zahl 2 kommt aber auch an anderer Stelle als Parameter vor. Wenn DU "nur" die 2 austauschst, würde sowohl die Zeilennummer als auch der Parameter geändert.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
der Code ist einfacher zu verstehen, wenn man mit Alt-F11 den VBE öffnet, den Cursor in den Code stellt und ihn dann im Einzelschrittmodus Taste-F8 ausführt.
Dann kann man im Sheet die Wirkung in der Tabelle G2:J7 sehen.
Damit der Code ein zweites Mal läuft, müssen die Bezüge in der Tabell auf $2 per Hand "suchen - ersetzen" zurück gesetzt werden.
Vielen Dank für eure Hilfe! Ich frage mich allerdings nun wie ich die jeweiligen Ergebnisse in die Spalten C:E für jede einzelne Zeile bekomme?
Wenn ich zunächst
Dim rngres As Range Set rngres = Range("G9:I9") schreibe um die Ergebnisse in die Variable zu fassen
und dann in die For-Schleife
rngres.Copy Destination:=Cells(i, 3)
integriere, wird leider immer der aktuellste Wert in ALLE Zeilen kopiert. Natürlich soll für jede Zeile, sprich für jeden Wert aus Spalte A:B, das entsprechende Ergebnis in den Spalten C:E in derselben Zeile "protokolliert" werden.
28.06.2019, 22:24 (Dieser Beitrag wurde zuletzt bearbeitet: 28.06.2019, 22:24 von Fennek.)
teste mal mit:
Code:
Sub F_en() Dim rng As Range Set rng = Range("G2:L7")
For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row rng.Replace "$" & i - 1, "$" & i Application.Calculate Range("G9:I9").Copy Cells(i - 1, 3).PasteSpecial xlValues Next i