Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1884to1888
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
Inhaltsverzeichnis

zwei verschachtelte Schleifen "einbauen"

zwei verschachtelte Schleifen "einbauen"
06.06.2022 19:28:58
Klaus
Gute Pfingsten an alle, besonders Werner und Karin, im Makro Schfl2 (auch eine neue "Schfl5 ist denkbar) hätte ich gerne eine weitere Funktionalität : 2 ermittel punktuell ! nur ein ! w aus xi und psi. Nun soll über alle xi und psi jeweils von -1 bis +1 eine w-Matrix von E80 bis AI100 entstehen. Genau diese beiden Schleifen kriege ich nicht integriert. Da geistern immer noch s und z = 1 to 9 herum. https://www.herber.de/bbs/user/153438.xlsm Danke Klaus

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: zwei verschachtelte Schleifen "einbauen"
07.06.2022 11:16:33
ChrisL
Hi Klaus
Ich blicke nicht durch, aber nachfolgend einfach mal einen Ansatz für die Schleife. Für die Schleife wirst du schnell Hilfe bekommen, aber die hohe Mathematik hinter deiner Beispieldatei werden wohl die wenigsten durchschauen.
Ich nehme an, x/y müssten dann als Inputwerte in G66/H66 geschrieben werden und der Outputwert I70 zurück in die Kreuztabelle? Aber I70 ist nicht verformelt...

Sub t()
Dim rngZelle As Range
Dim xi As Double, yi As Double
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
For Each rngZelle In .Range("E80:AI100")
xi = .Cells(78, rngZelle.Column) / (.Range("A26") / 2)
yi = .Cells(rngZelle.Row, 3) / (.Range("A30") / 2)
rngZelle = "Input - xi:" & xi & " yi:" & yi & " - Ouptut = ?"
Next rngZelle
End With
End Sub
cu
Chris
Anzeige
AW: zwei verschachtelte Schleifen "einbauen"
07.06.2022 13:57:04
Klaus
Danke Chris, die Mathe ist gelöst. Schau Dir bitte das Makro Schaltfläche2 (in G70) an : dies holt sich aus dem Blatt die Eingangsparameter und schreibt das Ergebnis in das Blatt (I70). Dies ist jedoch nur ein einziges w, nämlich bezogen auf ein ! Wertepaar von xi und phi ! Ich suche jedoch alle ! w für lfd. xi von E79 AI79 und psi von D80 bis D100. So wollte ich Schalfl2 (mein Fehlversuch war "Schaltfl5" in G102) um zwei for next Schleifen erweitern, die alle xi und psi durchlaufen und die jeweilgen Ergebnisse in die Matrix von E81 bis AI100 einschreibt. Wenn ich's richtig verstehe, wäre Dein "Output ?" also der Teil aus Schfl2, der auch I70 füllt ?
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
' MsgBox "xi = " & xi & " " & vbCrLf & "psi = " & psi & vbCrLf & " w = " & Format(w, "0.00")
Range("i70") = Format(w, "0.00")
Schöne Arbeitswoche, Klaus
Anzeige
AW: zwei verschachtelte Schleifen "einbauen"
07.06.2022 14:39:13
ChrisL
Hi Klaus
Danke für die Rückmeldung. Deine bestehende Berechnung habe ich übersehen. Ohne diese weiter zu hinterfragen, in eine benutzerdefinierte Funktion umgewandelt:

Sub t()
Dim rngZelle As Range
Dim xi As Double, yi As Double
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
For Each rngZelle In .Range("E80:AI100")
xi = .Cells(78, rngZelle.Column) / (.Range("A26") / 2)
yi = .Cells(rngZelle.Row, 3) / (.Range("A30") / 2)
rngZelle = MeineBerechnung(xi, yi)
Next rngZelle
End With
End Sub

Private 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
cu
Chris
Anzeige
AW: zwei verschachtelte Schleifen "einbauen"
07.06.2022 15:39:12
ChrisL
Hi Klaus
Übrigens die Funktion kannst du auch als Formel verwenden. Hierzu das "Private" löschen:

=meineberechnung(E$79;$D80)
cu
Chris
AW: zwei verschachtelte Schleifen "einbauen"
07.06.2022 17:38:48
Klaus
THX ChrisL, Deinen Kloß muß ich erst mal Schlucken und verdauen. Du sagt mir also, ich müsse nun einfach "Meine Berechnung" paßgenau in die Box E80 ...AI100 einsetzen. Die Mathe ist einfach eine Taylorreihe, die Koeff. (xi, statt x und psi, statt y) von hoch 0 bis hoch 8 multipliziert und aufsummiert. Genau da hakt's : einige "Ankerpunkte", die dort erscheinen sollten, siehst Du in U44 bis V54. What to do, um das alles bezogen auf x = xi von -1 to +1 step F49 und y = psi, wieder -1 to +1 step J74 zu beziehen ?. Alles, was ich brauche, kann ich aus dem Sheet holen, nur die Schleifenkonstrution bekomme ich nicht auf die Reihe. w soll also über cells s,z und xi über -1 to +1 step 0,0666 und psi über -1 to 1 step 0,1 und ein Raster E80 ... AI100 belegen. All of it kann ich aus dem Sheeet holen/abfragen. Eigentlich Eenfach, oder ? So long Klaus

Anzeige
AW: zwei verschachtelte Schleifen "einbauen"
07.06.2022 17:56:28
ChrisL
Hi Klaus
Im Anhang ein Beispiel, was ich mit der benutzerdefinierten Funktion (UDF) gemeint habe.
https://www.herber.de/bbs/user/153455.xlsm
Ankerpunkte hört sich nach Seefahrt an und yi-psi nach einer chinesischen Parteiversammlung. Scherz. Mir fehlt das Basiswissen (z.B. Taylorreihe sagt mir nichts) und wahrscheinlich müsste ich den Beitrag dann bald einmal an jemanden mit Mathe-Verstand abgeben. Evtl. hilft aber auch der kleine Schubser oben.
cu
Chris
AW: zwei verschachtelte Schleifen "einbauen"
07.06.2022 22:59:44
Klaus
Nein ChrisL, klammere die Math vollkommen aus; die ist durch ! Ich habe Wochen, Monate gebraucht, um herauszufinden, was XCalcs da eigentlich meint, einfach nur H. Taylor mit Fehlern in der korrekten math. Schreibweise, ... Daten aus der XCalcs.txt herauszulesen und Punkt, statt Komma usw. (mit der Hilfe von Euch Herbers) auf die Schliche zu kommen war schwierig. Dat Thema ist gelöst. Nun sind nur noch zwei Schleifen um w = ... zu legen, die statt eines einzigen ! festgelegten xi und psi nun alle laufenden xi und psi durchzugehen, um die (alle) (Teil-)Ergebnisse in den Block ab E80 zurückzugeben (= ist hier 'ne Kiste von -2a/2 bis + 2a/2 in 100er Schritten, analog mit der Hilfsvariablen xi nun -1 bis +1, Step 0,066666 und psi wie vorher, nun doch -/+2b/2 und dann, wie gehabt, nun Step 0,1. Thats it. Ich schaue mir Deinen UDF-Tip heute nacht noch an - viele Deiner Zahlen passen, einige jedoch nicht - und melde mich wieder. Ob ich's mit XCalcs 3 NK-Stellen oder mit meinen 8 NKs rechne kann allenfalls die erste NK ändern. Wenn Du magst, schau Dir doch U54 bis V54 in x und y bzw. die korrespodierenden xi =A51 ff/($A$26/2) und psi =D51 ff/($A$30/2) in gelb an. Warum Deine https://www.herber.de/bbs/user/153455.xlsm nun meine Schaltflächen2 und 5 ausblendet/verändert, ist mir noch nicht klar geworden. Der Algorithmus ist und bleibt "w=w+Cells... * pab64d, somit Summe aller w * pab64d. Dem muß ich nun nur noch statt fixen xi und psi running xi's und phi's "unterschieben". Isn't it ? Gut's Nächtle, Klaus
Anzeige
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

Anzeige
AW: zwei verschachtelte Schleifen "einbauen"
08.06.2022 14:42:30
Klaus
Nun Chris, Du hast recht. Abweichungen von 30 %, auch mehr, schon in der ersten NK, sind wohl dem gewählten Format geschuldet. Zudem rechnet XCalcs offensichtlich mit max 3 NK, ich mit min 8. Deine tricky UDF funktioniert ! Mir will jedoch nicht in den Kopp, daß ich nicht einfach in Schfl2 oder der neuen Schfl5
For s = 1 To 9
For z = 1 To 9
' hier nun mit xi von -1 to 1 step 0,06666
' und psi von -1 to 1 step 0,1
w = w + Cells(s, z) * xi ^ (s - 1) * psi ^ (z - 1)
' umschließen kann; mit pab64d multiplizieren, nach w maybe erst immer wieder 0 setzen kann/muß ?
Next
Next
' um so daraus dann alle Zwischenwerte nach E80 bis AI100 per Range("xxx") = Format(w, "0.00") zu schreiben. Ich kann doch aus meinem Blatt wirklich alle Parameter abholen ! Meine Sorge : die Taylorreihe muß nicht zwingend immer 0 ... 8. Potenz gehen ! Das graue Rechteck kann auch 3 x 5 groß sein ! Will sagen : ich möchte "flexibel" bleiben ! Ihr seid eine tolle Truppe, Klaus
Anzeige
AW: zwei verschachtelte Schleifen "einbauen"
08.06.2022 17:28:30
ChrisL
Hi Klaus
Ich fand es eigentlich recht zweckmässig, deine Hokus-Pokus-Fidibus-Berechnung von der Tabellennavigation zu trennen. Wie man sieht, wird es mit den 4 Schleifen und gleichzeitigen Zählern für Zeilen/Spalten sehr unübersichtlich.
Aber damit du beruhigt schlafen kannst ;), hier mal alles verschachtelt:

Sub Schaltfläche5_Klicken()
Dim zielzeile As Integer, zielspalte As Integer
Dim z As Integer, s As Integer
Dim xi As Double, psi As Double, pab64d As Double, w As Double
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
pab64d = .Range("C45").Value
.Range("E80:AI100").Clear
zielspalte = 5
For xi = -1 To 1 Step 0.0666666
zielzeile = 80
For psi = -1 To 1 Step 0.1
w = 0
For s = 1 To 9
For z = 1 To 9
w = w + Cells(s, z) * xi ^ (s - 1) * psi ^ (z - 1) * pab64d
Next z
Next s
.Cells(zielzeile, zielspalte) = WorksheetFunction.Round(w, 2)
zielzeile = zielzeile + 1
Next psi
zielspalte = zielspalte + 1
Next xi
End With
End Sub
cu
Chris
Anzeige
AW: zwei verschachtelte Schleifen "einbauen"
08.06.2022 18:35:17
Klaus
Hi Chris, wenn dat löpt, werde ich Dich in Rom zur Seeligsprechung anmelden. Das sagt ein Ungläubiger Idiot, der dat seit Anfang 22 nicht fehlerfrei hinbekommen hat !!! Lots of THX, Klaus
AW: zwei verschachtelte Schleifen "einbauen"
08.06.2022 18:44:10
ChrisL
Danke für die Rückmeldung. Gerne...
Aber mach da bitte mal noch einen Punkt vor Cells rein. :)

w = w + .Cells(s, z) * xi ^ (s - 1) * psi ^ (z - 1) * pab64d

AW: zwei verschachtelte Schleifen "einbauen"
09.06.2022 04:48:02
Klaus
Good morning Chris, absolut perfekt !!! Danke, Klaus

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige