Clever-Excel-Forum

Normale Version: Ausgabe aller möglichen Zahlenkombinationen (Kofferschloss)
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Ich lösche dennoch …

26865

Kleine Spielerei: Variable Anzahl Rädchen, jedes Rädchen mit individuellen Einstellmöglichkeiten:
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
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.
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?])

26865

(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.
Vielen Dank EarlFred !

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

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?
Dank Dir!

Habs mir nochmal genauer angeschaut. i=1 Blush

Schönen Abend noch!
Durch i=1 beginnen ja alle 3 Zahlen bei ist bis zur entsprechenden Array-Zahl. Kann ich aber auch 3 veschiedene Beginnzahlen angeben?

26865

(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.
Ich würde verwenden:
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
Seiten: 1 2 3