29.11.2017, 10:11 (Dieser Beitrag wurde zuletzt bearbeitet: 29.11.2017, 10:24 von bodoalbstadt.)
Hallo. Ich habe gerade eine Liste mit möglichen Nummern-Kombinationen erhalten. Aus dieser soll ich nun eine neue Liste mit allen Artikelnummern generieren, die möglich sind. Insgesamt sind es 15 Stellen mit zwischen 1 und 26 möglichen Zahlen/Buchstaben.
Gibt es eine Formel, mit der es möglich ist, aus all diesen möglichen Zahlen/Buchstaben eine komplette Liste zu generieren, die JEDE mögliche Artikelnummer enthält? Ich müsste es sonst manuell erstellen, was aber echt sehr viel Arbeit wäre und sehr fehleranfällig wie ich meine.
Ich hoffe, Ihr könnt mir da helfen. Vielen Dank schon mal im Voraus.
ja, so dramatisch es auch klingt, aber es sollen alle möglichen Kombinationen gelistet werden. Diese sollen in einer Datenbank fix hinterlegt werden. Aus meiner Sicht macht das absolut keinen Sinn, aber mein Chef verlangt das so. Keine Ahnung was der Sinn dabei sein soll, denn eigentlich macht es keinen Sinn. Da bin ich auch mit meinen Kollegen einig. Shit happens. So viele Zeilen kann Excel gar nicht stemmen, oder?
Arrays kommen bei dieser Datenmenge an Ihre Grenzen, daher sah ich nur die Möglichkeit, Stück für Stück die Kombis in eine TXT-Datei zu schreiben.
Versuch Dich mal mit folgendem Code
Code:
Option Explicit
Public Sub NummernGenerieren()
Dim QuellArr As Variant
Dim TempArr As Variant
Dim KombiArr As Variant
Dim ZielArr As Variant
Dim i As Long, j As Long, k As Long, Start As Date
Dim Paket As Long
Dim a As String, Ausgabefile As String
Dim i1 As Long, i2 As Long, i3 As Long, i4 As Long, i5 As Long
Dim i6 As Long, i7 As Long, i8 As Long, i9 As Long, i10 As Long
Dim i11 As Long, i12 As Long, i13 As Long, i14 As Long, i15 As Long
ReDim KombiArr(LBound(QuellArr, 2) To UBound(QuellArr, 2))
'Kombinationsmöglichkeiten auslesen und leere Zellen ignorieren
For i = LBound(QuellArr, 2) To UBound(QuellArr, 2)
k = 0
Set TempArr = Nothing
For j = LBound(QuellArr, 1) To UBound(QuellArr, 1)
If Not IsEmpty(QuellArr(j, i)) Then
k = k + 1
If Not IsArray(TempArr) Then
ReDim TempArr(1 To k)
Else
ReDim Preserve TempArr(1 To k)
End If
TempArr(k) = QuellArr(j, i)
End If
Next j
KombiArr(i) = TempArr
Next i
'Anzahl Kombinationen ermitteln
k = 1
For i = LBound(KombiArr, 1) To UBound(KombiArr, 1)
k = k * UBound(KombiArr(i))
Next i
'Kombinationsmöglichkeiten aufbauen und in Textdatei schreiben
i = 0: a = "": j = 1: Paket = 250
For i1 = LBound(KombiArr(1)) To UBound(KombiArr(1))
For i2 = LBound(KombiArr(2)) To UBound(KombiArr(2))
For i3 = LBound(KombiArr(3)) To UBound(KombiArr(3))
For i4 = LBound(KombiArr(4)) To UBound(KombiArr(4))
For i5 = LBound(KombiArr(5)) To UBound(KombiArr(5))
For i6 = LBound(KombiArr(6)) To UBound(KombiArr(6))
For i7 = LBound(KombiArr(7)) To UBound(KombiArr(7))
For i8 = LBound(KombiArr(8)) To UBound(KombiArr(8))
For i9 = LBound(KombiArr(9)) To UBound(KombiArr(9))
For i10 = LBound(KombiArr(10)) To UBound(KombiArr(10))
For i11 = LBound(KombiArr(11)) To UBound(KombiArr(11))
For i12 = LBound(KombiArr(12)) To UBound(KombiArr(12))
For i13 = LBound(KombiArr(13)) To UBound(KombiArr(13))
For i14 = LBound(KombiArr(14)) To UBound(KombiArr(14))
For i15 = LBound(KombiArr(15)) To UBound(KombiArr(15))
i = i + 1: j = j + 1
a = a & _
KombiArr(1)(i1) & KombiArr(2)(i2) & KombiArr(3)(i3) & KombiArr(4)(i4) & KombiArr(5)(i5) & _
KombiArr(6)(i6) & KombiArr(7)(i7) & KombiArr(8)(i8) & KombiArr(9)(i9) & KombiArr(10)(i10) & _
KombiArr(11)(i11) & KombiArr(12)(i12) & KombiArr(13)(i13) & KombiArr(14)(i14) & KombiArr(15)(i15) & vbCrLf
If j > Paket Then
'Debug.Print i
Print #1, a
a = "": j = 1
End If
'If i > 500000 Then GoTo Ende
Next i15
Next i14
Next i13
Next i12
Next i11
Next i10
Next i9
Next i8
Next i7
Next i6
Next i5
Next i4
Next i3
Next i2
Next i1
Ende:
Close #1
Debug.Print "Paketgröße: "; Paket, "Start: "; Start, "Ende: "; Time(), "Dauer in Min: "; Round((Time() - Start) * 24 * 60, 2)
End Sub
und lass Excel ruhig 2- 3 Stunden Zeit !!!
LG Gerd
besten Dank. Ich werde es nachher laufen lassen wenn ich Feierabend mache. Dann muss mein Chef halt bis morgen früh warten bis er die Liste bekommt. Niemand kann zaubern bei solchen Datenmengen. Vielen Dank.