Ausgabe aller möglichen Zahlenkombinationen (Kofferschloss)
#21
Hallo! Soll dieser Code einen vorherigen ersetzen oder muss ich ihn einfach einfügen?

Ginge auch Rad 1 (2-4), Rad 2 (7-12) und Rad 3 (3-7)?

Danke
Antworten Top
#22
Ersetzen reicht. Und dann testen. Die Zeile mit Msgbox löschen.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#23
Code:
Option Explicit

Sub Kombinationen()
Dim Rädchen_oben As Variant
Dim Rädchen_unten As Variant

'Rad 1 (2-4), Rad 2 (7-12) und Rad 3 (3-7)?
Rädchen_oben = Array(4, 12, 7)
Rädchen_unten = Array(2, 7, 3)

Range("A:A").ClearContents
Range("A1").Value = "Kombinationen"
ReDim erg(0 To UBound(Rädchen_oben))
Call RecLoop(Rädchen_oben, Rädchen_unten, erg)
End Sub

Sub RecLoop(ByVal Rädchen_oben, ByVal Rädchen_unten, ByRef erg As Variant)
Dim i As Long
Dim f_o As Variant: f_o = Rädchen_oben
Dim f_u As Variant: f_u = Rädchen_unten
Dim blnEnde As Boolean

If UBound(Rädchen_oben) > 0 Then
   ReDim Preserve f_o(0 To UBound(f_o) - 1)
   ReDim Preserve f_u(0 To UBound(f_u) - 1)
Else
   blnEnde = True
End If
 
For i = Rädchen_unten(UBound(Rädchen_unten)) To Rädchen_oben(UBound(Rädchen_oben))
   erg(UBound(Rädchen_oben)) = i
   If Not blnEnde Then Call RecLoop(f_o, f_u, erg)
   If blnEnde Then Cells(Rows.Count, 1).End(xlUp).Offset(1).Value = "'" & Join(erg, "-")
Next i
End Sub
Antworten Top
#24
Perfekt! Danke für Deine Mühen!

Schönes Wochenende

LG
Antworten Top
#25
Ohne Recursion,
Alles im Arbeitsspeicher (Array) (schneller): nur 1 Zugriff zum Arbeitsblatt.

Code:
Sub M_snb()
  sn = Array(8, 14, 10)
  ReDim sp(sn(0) * sn(1) * sn(2), 0)
 
  For j = 0 To UBound(sp) - 1
    sp(j, 0) = j \ (sn(1) * sn(2)) & "_" & (j \ sn(2)) Mod sn(1) & "_" & j Mod sn(2)
  Next
 
  Cells(1).Resize(UBound(sp)) = sp
End Sub

Wenn die Utergrenze >0 ist:

Code:
Sub M_snb()
  sn = Array(8, 14, 10)        '   bis
  sq = Array(2, 7, 3)           '   von
  
  sn(0) = sn(0) - sq(0)
  sn(1) = sn(1) - sq(1)
  sn(2) = sn(2) - sq(2)
  
  ReDim sp(sn(0) * sn(1) * sn(2), 0)
  
  For j = 0 To UBound(sp) - 1
    sp(j, 0) = j \ (sn(1) * sn(2)) + sq(0) & "_" & (j \ sn(2)) Mod sn(1) + sq(1) & "_" & j Mod sn(2) + sq(2)
  Next
  
  Columns(1).ClearContents
  Cells(1).Resize(UBound(sp) + 1) = sp
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#26
Hallo Redgeier,

am schnellsten geht es bei einem manuellen Zahlenschloss, mit etwas Fingerspitzengefühl und der von Gast 123 vorgeschlagenen Methode, mit etwas Kriechöl noch etwas schneller.
Gruß Karl
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 4 Gast/Gäste