Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1224to1228
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Kombinationen auflisten

Kombinationen auflisten
Peter
Hallo zusammen,
ich habe eine Liste mit Auftragsnummern und Artikelnummern. Nun möchte ich pro Auftrag auflisten, welche Kombinationen von Artikeln es gibt. Es sollen immer nur 2 Artikelnummern miteinander kombiniert werden.
Habt ihr eine Idee, wie ich das (möglichst mit VBA) lösen kann?
Vielen Dank + Gruß,
Peter
https://www.herber.de/bbs/user/76296.xls

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
VBA: Auftragskombinationen auflisten
22.08.2011 12:27:58
NoNet
Hallo Peter,
hier ein passender VBA-Code :
Sub AuftragsKombisAuflisten()
Dim lngZ1 As Long, lngZ2 As Long, lngZ3 As Long
Dim lngZA As Long, lngZE As Long, lngZN As Long
Const lngEZ As Long = 4 'Zeile der ersten Kombination
lngZN = lngEZ
lngZA = lngZN
For lngZ1 = lngEZ To Cells(Rows.Count, 1).End(xlUp).Row + 1
If Cells(lngZ1 - 1, 1)  Cells(lngZ1, 1) And lngZ1 > lngZA Then 'Auftragswechsel
For lngZ2 = lngZA To lngZE - 1
For lngZ3 = lngZ2 + 1 To lngZE
Cells(lngZN, 4) = Cells(lngZ2, 1)
Cells(lngZN, 5) = Cells(lngZ2, 2) & Cells(lngZ3, 2)
lngZN = lngZN + 1
Next
Next
lngZA = lngZ1
Else
lngZE = lngZ1
End If
Next
'Sortieren :
Range(Cells(lngEZ, 4), Cells(lngZN, 5)).Sort key1:=Cells(lngEZ, 4), key2:=Cells(lngEZ, 5),  _
header:=xlNo
End Sub
Bzgl. (möglichst mit VBA) : Ohne VBA wäre das auch sehr viel aufwendiger zu lösen ;-))
Gruß, NoNet
Exceltreffen 28.-30.10.2011 in Chemnitz
Ein Treffen für alle Excel-Freunde und Besucher deutschsprachiger Excel-Foren.
Alle Infos - Programm - Anmeldung - Teilnehmerliste etc. gibt es auf
http://www.exceltreffen.de/index.php?page=211
Wir freuen uns auf euch...

Anzeige
AW: VBA: Auftragskombinationen auflisten
22.08.2011 12:51:00
Peter
Hallo NoNet,
klappt perfekt. Vielen Dank. Hab`s mir schon gedacht, dass es mit VBA einfacher ist, nur für mich halt nicht...
Beste Grüße,
Peter
AW: VBA: Auftragskombinationen auflisten
22.08.2011 12:57:56
Manu
alternativ auch...
Sub cmdKombi()
Dim raA As Range
Dim raB As Range
Dim raC As Range
Dim strA2 As String
Dim strB2 As String
Dim i As Integer
Dim x As Integer
Dim y As Integer
y = 4
For i = 4 To 28
Set raA = Cells(i, 8)
For x = 4 To 28
If x  raB.Value Then Exit For
Set raC = Cells(y, 11)
strA2 = raA.Offset(0, 1).Value
strB2 = raB.Offset(0, 1).Value
raC.Value = strA2 + strB2
raC.Offset(0, -1).Value = raA.Value
y = y + 1
If raA.Offset(0, 1).Value = raB.Offset(0, 1).Value Then
raC.Value = ""
y = y - 1
End If
Next x
Next i
End Sub
LG
Manu
Anzeige
AW: VBA: Auftragskombinationen auflisten
22.08.2011 13:39:05
Peter
Hallo,
auch dir vielen Dank, Manu; werde ich gleich mal ausprobieren
Ich hätte jetzt noch ein weiteres Problem. Das Makro trägt ja die Auftragsnummer und die Kombinationen in die Spalten D und E ein. Ich habe das jetzt mal mit 10.000 Datensätzen ausprobiert und erhalte ca. 60.000 Kombinationen. Bei noch mehr Datensätzen wird die Anzahl der Kombinationen vermutlich erheblich höher. Wie kann ich es hinbekommen, dass - wenn das Limit von 1.048.576 Kombinationen erreicht worden ist - die weiteren Auftragsnummern und Kombinationen in neue Spalten geschrieben werden?
Besten Dank,
Peter
Anzeige
Neue Spalte bei Zeilenende
22.08.2011 13:51:19
NoNet
Hallo Peter,
hier eine angepasste Variante : Falls die Anzahl möglicher Zeilen erreicht wurde, wird die Liste einfach mit 1 Leerspalte getrennt wieder oben fortgeführt. Allerdings ist eine Sortierung dann nicht mehr (bzw. nur in der ersten Ergebnisreihe) möglich :
Sub AuftragsKombisAuflisten()
Dim lngZ1 As Long, lngZ2 As Long, lngZ3 As Long
Dim lngZA As Long, lngZE As Long, lngZN As Long
Dim lngS As Long
Const lngEZ As Long = 4 'Zeile der ersten Kombination
lngS = 4 'Ab Spalte 4 eintragen
lngZN = lngEZ
lngZA = lngZN
For lngZ1 = lngEZ To Cells(Rows.Count, 1).End(xlUp).Row + 1
If Cells(lngZ1 - 1, 1)  Cells(lngZ1, 1) And lngZ1 > lngZA Then 'Auftragswechsel
For lngZ2 = lngZA To lngZE - 1
For lngZ3 = lngZ2 + 1 To lngZE
Cells(lngZN, lngS) = Cells(lngZ2, 1)
Cells(lngZN, lngS + 1) = Cells(lngZ2, 2) & Cells(lngZ3, 2)
lngZN = lngZN + 1
If lngZN > Rows.Count Then 'Falls Anzahl Zeilen erreicht wurde
lngZN = lngEZ 'Zeilenzähler wieder auf Anfangszeile
lngS = lngS + 3 '3 Spalten weiter
End If
Next
Next
lngZA = lngZ1
Else
lngZE = lngZ1
End If
Next
'Sortieren (nur Spalten 4 und 5):
Range(Cells(lngEZ, 4), Cells(lngZN, 5)).Sort key1:=Cells(lngEZ, 4), key2:=Cells(lngEZ, 5),  _
header:=xlNo
End Sub
Gruß, NoNet
Exceltreffen 28.-30.10.2011 in Chemnitz
Ein Treffen für alle Excel-Freunde und Besucher deutschsprachiger Excel-Foren.
Alle Infos - Programm - Anmeldung - Teilnehmerliste etc. gibt es auf
http://www.exceltreffen.de/index.php?page=211
Wir freuen uns auf euch...

Anzeige
AW: Neue Spalte bei Zeilenende
22.08.2011 14:05:36
Peter
Hallo NoNet,
nochmal vielen Dank!!!
Beste Grüße,
Peter
Weiterverarbeitung der Kombinationen
26.08.2011 13:00:14
Peter
Hallo NoNet,
ich stehe vor einem weiteren Problem. Ich habe mal dein Makro durchlaufen lassen, mit 250.000 Datensätzen. Als Ergebnis habe ich ca 3 Mill. Kombinationen erhalten. Nun möchte ich diese Kombinationen zusammen fassen (unabhängig des Auftrags) und deren gesamte Anzahl auflisten. Beispiel:

Artikel 1 - Artikel 2    34 mal
Artikel 2 - Artikel 3    213 mal
Artikel 1 - Artikel 3    69 mal
Das versuche ich derzeit per Pivot, ist aber nur über mehrere Schritte machbar.
Hast du vielleicht eine Idee, ob ich das schon während des Auflistens der Kombinationen abfangen kann? Z.B. wenn die Kombination Artikel 1 - Artikel 2 zum ersten Mal auftaucht, könnte die Kombination

Artikel 1 - Artikel 2    1 mal
weggeschrieben werden. Taucht die Kombination erneut auf, wird sie nicht noch einmal weggeschrieben, sondern der Zähler erhöht

Artikel 1 - Artikel 2    2 mal
Weißt du, was ich meine und hast vielleicht einen Vorschlag für mich?
Schon mal vielen herzlichen Dank vorab,
Beste Grüße,
Peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige