AW: zwei verschachtelte Schleifen "einbauen"
08.06.2022 08:55:27
ChrisL
Hi Klaus
Ja deine Makros hinter den Schaltflächen habe ich frech rausgeworfen. Ich musste die Datei als xlsx speichern, damit ich an der Firewall vorbei komme. Aber ist ja egal, die sind schnell wieder reinkopiert.
U54/V54:
x = 1000, y = 500, Ergebnis = 3.45
Das Ergebnis stimmt m.E. überein und deine Schaltfläche2 und meine Funktion liefern dasselbe.
Deine Prozedur und meine Funktion verglichen. Grundsätzlich identisch, mit folgenden Ausnahmen:
a) Du benutzt zur Ergebnisanzeige Format und ich Runden. Sollte zwar in Bezug auf die Ergebniszahl keinen Unterschied machen, aber VBA-Format wäre m.E. nur für eine Text-Ausgabe zu gebrauchen. Wenn dann müsste man das Zellenformat für den Bereich E80:AI100 anpassen und gar nicht runden.
b) Mit der folgenden Zeile...
Dim xi, psi, pab64d, w As Double
...deklarierst du zwar "w" als Double, aber die anderen 3 Variablen sind unbehandelt d.h. die werden zum Datentyp Variant. In der Funktion hingegen sind auch die anderen 3 Variablen als Double deklariert.
Dieser kleine Unterschied könnte tatsächlich zu Differenzen in den Nachkommastellen führen, welche sich durch die Schleife/Berechnung potenzieren.
Lass dir Zeit mit deiner Analyse, dann sehen wir weiter.
cu
Chris
Function MeineBerechnung(xi As Double, psi As Double) As Double
Dim z As Integer, s As Integer
Dim pab64d As Double, w As Double
Dim w_im_punkt As Double
With Worksheets("Tabelle1")
pab64d = .Range("C45").Value
w = 0
For s = 1 To 9
For z = 1 To 9
w = w + .Cells(s, z) * xi ^ (s - 1) * psi ^ (z - 1)
Next
Next
End With
w = w * pab64d
MeineBerechnung = WorksheetFunction.Round(w, 2)
End Function
Sub Schaltfläche2_Klicken()
Dim z, s As Integer
Dim xi, psi, pab64d, w As Double
Dim w_im_punkt As Double
xi = Range("G68").Value
psi = Range("H68").Value
pab64d = Range("C45").Value
w = 0
For s = 1 To 9
For z = 1 To 9
w = w + Cells(s, z) * xi ^ (s - 1) * psi ^ (z - 1)
Next
Next
w = w * pab64d
Range("i70") = Format(w, "0.00")
End Sub