Hallo,
also du könntest alle verfügbaren Zahlen in verschiedene Arrays speichern, und dann die immer so der Reihe nach durchlaufen, und bei jedem Durchlauf halt prüfen, ob eine Ziffer schon vorkommt. z.B (Code in ein Modul einfügen):
Public Type ArrayWrapper
Arr() As Long
End Type
Public Function GenerateZahlen(Arrs() As ArrayWrapper) As Long()
Dim i As Long, j As Long
Dim ret() As Long
ReDim ret(UBound(Arrs), 500)
Dim AktAnzahlZahlen As Long
Dim Indizes() As Long, Zahl() As Long
ReDim Indizes(UBound(Arrs))
ReDim Zahl(UBound(Arrs))
Dim ZahlKommtBereitsVorIndex As Long
Do While Indizes(0) <= UBound(Arrs(0).Arr)
ZahlKommtBereitsVorIndex = -1
For i = 0 To UBound(Arrs)
Zahl(i) = Arrs(i).Arr(Indizes(i))
For j = 0 To i - 1
If Zahl(j) = Zahl(i) Then
ZahlKommtBereitsVorIndex = i
Exit For
End If
Next
Next
If ZahlKommtBereitsVorIndex < 0 Then
If UBound(ret, 2) <= AktAnzahlZahlen Then
ReDim Preserve ret(UBound(Arrs), CLng(UBound(ret, 2) * 1.75))
End If
For i = 0 To UBound(Arrs)
ret(i, AktAnzahlZahlen) = Zahl(i)
Next
AktAnzahlZahlen = AktAnzahlZahlen + 1
ZahlKommtBereitsVorIndex = UBound(Arrs)
End If
'Weiterschalten
Indizes(ZahlKommtBereitsVorIndex) = Indizes(ZahlKommtBereitsVorIndex) + _
1
For i = ZahlKommtBereitsVorIndex To 1 Step -1
If Indizes(i) > UBound(Arrs(i).Arr) Then
Indizes(i) = 0
Indizes(i - 1) = Indizes(i - 1) + 1
End If
Next
Loop
ReDim Preserve ret(UBound(Arrs), AktAnzahlZahlen - 1)
GenerateZahlen = ret
End Function Da es glaub ich in VB6 keine Arrays aus Arrays direkt gibt, musste ich einen ArrayWrapper dafür verwenden. Dieser Funktion übergibt man einfach ein Array aus ArrayWrapper, die die zur Verfügung stehenden Zahlen enthalten, und gibt ein 2-dimensionales Array zurück, wobei die 1. Dimension die Ziffer angibt und die 2. Dimension die Zeile.
z.B.
Dim i As Long, j As Long
Dim ArraysString(5) As String
ArraysString(0) = "1,2,3,4,5,6,7,8,9"
ArraysString(1) = "2,3,4,5,6,7,8,9,10,11,12,13"
ArraysString(2) = "4,5,6,7,8,9,10,11,12,13,14,15,16,17,18"
ArraysString(3) = "7,9,10,11,12,13,14,15,16,17,18,20,21"
ArraysString(4) = "8,10,11,13,14,15,16,17,18,19,20,21,22,23"
ArraysString(5) = "15,16,18,19,20,21,22,23,24"
Dim ArrWrappers() As ArrayWrapper
ReDim ArrWrappers(UBound(ArraysString))
For i = 0 To UBound(ArrWrappers)
Dim Zahlen() As String
Zahlen = Split(ArraysString(i), ",")
ReDim ArrWrappers(i).Arr(UBound(Zahlen))
For j = 0 To UBound(ArrWrappers(i).Arr)
ArrWrappers(i).Arr(j) = CLng(Zahlen(j))
Next
Next
Dim ret() As Long
'Zahlen generieren
ret = GenerateZahlen(ArrWrappers)
For i = 0 To UBound(ret, 2)
Dim s As String
s = ""
For j = 0 To UBound(ret, 1)
s = s & ret(j, i) & " "
Next
Debug.Print s
Next
End Sub Ich hab dort die zur Verfügung stehenden Zahlen als String (druch Komma getrennt) angegeben, weil man in VB6 auch noch keine Arrayinitialisierer direkt angeben kann. Dieser Code erzeugt dann die Zahlen und gibt sie im Debugbereich aus. |