29.11.2017, 11:11 (Dieser Beitrag wurde zuletzt bearbeitet: 29.11.2017, 11: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.