23.11.2023, 17:56
26865
23.11.2023, 18:04
Kleine Spielerei: Variable Anzahl Rädchen, jedes Rädchen mit individuellen Einstellmöglichkeiten:
Rädchen = Array(7, 13, 9) gibt die Anzahl Rädchen und die Einstellungen vor (jeweils 0 bis zur angegebenen Zahl). Bei mehr oder weniger Rädchen einfach Zahlen ergänzen oder löschen.
Code:
Option Explicit
Sub Kombinationen()
Dim Rädchen As Variant
'Vorgabe: Anzahl "Rädchen", jeweils von 0 bis Obergrenze
'z. B. Rad 1 von 0 bis 7, Rad 2 von 0 bis 13, Rad 3 von 0 bis 9
Rädchen = Array(7, 13, 9)
Range("A:A").ClearContents
Range("A1").Value = "Kombinationen"
ReDim erg(0 To UBound(Rädchen))
Call RecLoop(Rädchen, erg)
End Sub
Sub RecLoop(ByVal Rädchen, ByRef erg As Variant)
Dim i As Long, f As Variant: f = Rädchen
If UBound(Rädchen) > 0 Then ReDim Preserve f(0 To UBound(f) - 1) Else f = 0
For i = 0 To Rädchen(UBound(Rädchen))
erg(UBound(Rädchen)) = i
If IsArray(f) Then Call RecLoop(f, erg)
If UBound(Rädchen) = 0 Then Cells(Rows.Count, 1).End(xlUp).Offset(1).Value = "'" & Join(erg, "-")
Next i
End Sub
23.11.2023, 18:20
Sehr schön!
Ernst gemeinte Frage:
Ist das eine "echte" Rekursion?
Ich stehe damit ein wenig auf Kriegsfuß.
(was man heute sicherlich gar nicht schreiben darf, ähnlich dem irgendwann als "unschicklich" geächtetem "Monitor im Kreuzfeuer" [Du erinnerst Dich, wurde als Kreuzverhör umbenannt?])
Ernst gemeinte Frage:
Ist das eine "echte" Rekursion?
Ich stehe damit ein wenig auf Kriegsfuß.
(was man heute sicherlich gar nicht schreiben darf, ähnlich dem irgendwann als "unschicklich" geächtetem "Monitor im Kreuzfeuer" [Du erinnerst Dich, wurde als Kreuzverhör umbenannt?])
26865
23.11.2023, 18:37
(23.11.2023, 18:20)RPP63 schrieb: [ -> ]Ist das eine "echte" Rekursion?Ja, die Sub ruft sich selbst (mit jeweils geänderten Argumenten) auf. Nimm mal eine kleine Menge Kombinationen und spiel das mal im Einzelschritt durch. Behalte vor allem f, i und erg im Auge.
Das geht bestimmt auch eleganter, war ein Schnellschuss.
23.11.2023, 19:22
Vielen Dank EarlFred !
So hatte ich es mir vorgestellt.
Kann man den Code auch so gestalten, dass ich angeben kann, wo meine Zahlen für die jeweiligen Rädchen beginnen?
Areray(7, 13, 9) begann ja bei 0-7, 0-13 & 0-9). Kann man für das 1. Rädchen auch bei 1 beginnen (1-5) und das 2. Rädchen (3-6) und eine Eingabe für das 3. Rädchen z.B. von 4-8 machen? Also nicht, dass immer bei der Zahl 0 begonnen wird?
Vielen Dank
So hatte ich es mir vorgestellt.
Code:
'Vorgabe: Anzahl "Rädchen", jeweils von 0 bis Obergrenze
'z. B. Rad 1 von 0 bis 7, Rad 2 von 0 bis 13, Rad 3 von 0 bis 9
Rädchen = Array(7, 13, 9)
Kann man den Code auch so gestalten, dass ich angeben kann, wo meine Zahlen für die jeweiligen Rädchen beginnen?
Areray(7, 13, 9) begann ja bei 0-7, 0-13 & 0-9). Kann man für das 1. Rädchen auch bei 1 beginnen (1-5) und das 2. Rädchen (3-6) und eine Eingabe für das 3. Rädchen z.B. von 4-8 machen? Also nicht, dass immer bei der Zahl 0 begonnen wird?
Vielen Dank
26865
23.11.2023, 19:34
Ich mag Menschen, die sich mit Lösungen beschäftigen, sie zuerst mal zu verstehen versuchen und dann selbst anpassen können.
Wo müsste man das denn anpassen? Welche Varianten fallen dir ein?
Wo müsste man das denn anpassen? Welche Varianten fallen dir ein?
23.11.2023, 20:22
Dank Dir!
Habs mir nochmal genauer angeschaut. i=1
Schönen Abend noch!
Habs mir nochmal genauer angeschaut. i=1
Schönen Abend noch!
23.11.2023, 21:47
Durch i=1 beginnen ja alle 3 Zahlen bei ist bis zur entsprechenden Array-Zahl. Kann ich aber auch 3 veschiedene Beginnzahlen angeben?
26865
24.11.2023, 06:37
(23.11.2023, 21:47)Redgeier schrieb: [ -> ]Durch i=1 beginnen ja alle 3 Zahlen bei ist bis zur entsprechenden Array-Zahl. Kann ich aber auch 3 veschiedene Beginnzahlen angeben?Du hast doch jetzt alles gelernt, was du zur Umsetzung brauchst, so dass die Frage „ob“ unzulässig ist. Selbstverständlich ist es möglich und du kannst es auch.
- du weißt, wie man die Obergrenze der Werte definiert.
- du kannst analog also auch die Untergrenze definieren.
- du weißt, wo die Untergrenze verwendet wird.
Alles da an Wissen. Einfach anwenden, das ist kein Hexenwerk.
24.11.2023, 09:50
Ich würde verwenden:
1: 0-7
2: 0-13
3: 0-9
1: 0-7
2: 0-13
3: 0-9
Code:
Sub M_snb()
msgbox = 8 * 14 * 10
Cells(1).Resize(1120) = [index(int((row(1:1120)-1)/(14*10)) & "_" & mod(int((row(1:1120)-1)/10),14) & "_" & mod(row(1:1120)-1,10),)]
End Sub