Schleifen Funktionen
23.05.2013 13:33:37
Annika
Habe drei Variabeln die einen Start und Endwert haben, die Variabeln sollen über eine Schrittweite die ebenfalls als Variable definiert ist benutzt werden. Eingabe der Variabeln hab ich über eine inputbox realisiert.
Ziel ist es eine Tabelle im Excel übe Makro zu generieren in der alle Kombinationsmöglichkeiten der drei Variabeln aufgeführt sind.
Ich bin soweit gekommen, dass über drei nach einander geschriebenen For-/Next-Schleifen mir zu jeder Variabeln die Reihe mit den richtigen Steps generiert wird.
Über verschachteln der For-/Next-Schleifen hab ich es hin bekommen, dass von einer Variabeln die Reihe einmal dargestellt wird von der zweiten die Reihe so oft dargestellt wird wie die erste Variabeln-Reihe Schritte hat. Und die dritte Variabeln-Reihe wird dann Schritteanzahl hoch 3 wiederholt.
Problem die Variabeln-Reihen der ersten zwei werden nicht komplett bis zum schluss durchgezogen.
Gibt es eine möglichkeit über eine Verschachtelung von For-/Next-Schleifen, Do-/Loop-Schleifen oder While-/Wend-Schleifen die Tabelle so generieren zu lassen, dass alle Kombinationsmöglichkeiten dargestellt werden.
Habe meine Versuchs Excel-Tabelle angefügt. Ebenfalls ist in der Excel-Datei ein ganz einfaches Beispiel wie ich mir das Ergebniss vorstelle.
https://www.herber.de/bbs/user/85486.xlsm
Hier ist mein Makro:
Sub For_Next_Schleife()
Dim dblDurchmesserinnenStart As Double
Dim dblDurchmesserinnenEnde As Double
Dim dblDurchmesserinnenSchrittweite As Double
Dim dblDurchmesserinnenSchritte As Double
Dim intRowDurchmesserinnen As Integer
Dim dblDurchmesseraussenStart As Double
Dim dblDurchmesseraussenEnde As Double
Dim dblDurchmesseraussenSchrittweite As Double
Dim dblDurchmesseraussenSchritte As Double
Dim intRowDurchmesseraussen As Integer
Dim dblSpulenhöheStart As Double
Dim dblSpulenhöheEnde As Double
Dim dblSpulenhöheSchrittweite As Double
Dim dblSpulenhöheSchritte As Double
Dim intRowSpulenhöhe As Integer
Application.ScreenUpdating = False
'Startzeile der Zahlenreihe festlegen
intRowDurchmesserinnen = 10
intRowDurchmesseraussen = 10
intRowSpulenhöhe = 10
'Eingabe über Inputboxen
On Error GoTo Ende
dblDurchmesserinnenStart = InputBox("Startzahl Durchmesserinnen eintragen", "Startzahl", Range(" _
B3"))
dblDurchmesserinnenEnde = InputBox("Endzahl Durchmesserinnen eintragen", "Endzahl", Range("B4")) _
dblDurchmesserinnenSchrittweite = InputBox("Schrittweite Durchmesserinnen eintragen", " _
Schrittweite", Range("B5"))
dblDurchmesseraussenStart = InputBox("Startzahl Durchmesseraussen eintragen", "Startzahl", _
Range("C3"))
dblDurchmesseraussenEnde = InputBox("Endzahl Durchmesseraussen eintragen", "Endzahl", Range("C4" _
))
dblDurchmesseraussenSchrittweite = InputBox("Schrittweite Durchmesseraussen eintragen", " _
Schrittweite", Range("C5"))
dblSpulenhöheStart = InputBox("Startzahl Spulenhöhe eintragen", "Startzahl", Range("D3"))
dblSpulenhöheEnde = InputBox("Endzahl Spulenhöhe eintragen", "Endzahl", Range("D4"))
dblSpulenhöheSchrittweite = InputBox("Schrittweite Spulenhöhe eintragen", "Schrittweite", Range( _
"D5"))
On Error GoTo 0
'Alle Werte im Bereich "C5:C65536" löschen
Range("B5:B75536").ClearContents
Range("C5:C75536").ClearContents
Range("D5:D75536").ClearContents
'Eingabewerte übertragen
Range("B3") = dblDurchmesserinnenStart
Range("B4") = dblDurchmesserinnenEnde
Range("B5") = dblDurchmesserinnenSchrittweite
Range("C3") = dblDurchmesseraussenStart
Range("C4") = dblDurchmesseraussenEnde
Range("C5") = dblDurchmesseraussenSchrittweite
Range("D3") = dblSpulenhöheStart
Range("D4") = dblSpulenhöheEnde
Range("D5") = dblSpulenhöheSchrittweite
If dblDurchmesserinnenStart > dblDurchmesserinnenEnde And dblDurchmesserinnenSchrittweite > 0 _
Then _
dblDurchmesserinnenSchrittweite = dblDurchmesserinnenSchrittweite * -1
If dblDurchmesseraussenStart > dblDurchmesseraussenEnde And dblDurchmesseraussenSchrittweite > _
0 Then _
dblDurchmesseraussenSchrittweite = dblDurchmesseraussenSchrittweite * -1
If dblSpulenhöheStart > dblSpulenhöheEnde And dblSpulenhöheSchrittweite > 0 Then _
dblSpulenhöheSchrittweite = dblSpulenhöheSchrittweite * -1
For dblDurchmesserinnenSchritte = dblDurchmesserinnenStart To dblDurchmesserinnenEnde Step _
dblDurchmesserinnenSchrittweite
Cells(intRowDurchmesserinnen, 2) = dblDurchmesserinnenSchritte
intRowDurchmesserinnen = intRowDurchmesserinnen + 1
For dblDurchmesseraussenSchritte = dblDurchmesseraussenStart To dblDurchmesseraussenEnde _
Step dblDurchmesseraussenSchrittweite
Cells(intRowDurchmesseraussen, 3) = dblDurchmesseraussenSchritte
intRowDurchmesseraussen = intRowDurchmesseraussen + 1
For dblSpulenhöheSchritte = dblSpulenhöheStart To dblSpulenhöheEnde Step dblSpulenhö _
heSchrittweite
Cells(intRowSpulenhöhe, 4) = dblSpulenhöheSchritte
intRowSpulenhöhe = intRowSpulenhöhe + 1
Next
Next
Next
Ende:
End Sub
Danke vor ab für eure Hilfe
Gruß Annika