Hallo zusammen, ich möchte alle möglichen Kombination von den Werten in der Spalte A und Spalte B bilden. Mit der bisherigen Codierung erhalte ich mit dem Klicken auf "Schaltfläche" das in schwarz geschriebene Ergebnis. Ich möchte jedoch das rote Ergebnis erreichen. Anbei ist die Excel Datei zu finden. Dateiupload bitte im Forum! So geht es: Klick mich! " border="0">
in Deiner Beispieltabelle sind die Daten zuerst nach Spalte A sortiert. Dadurch könntest Du beim Eintrag in die Tabelle vom einzutragenden Inhalt die Buchstabenkombination mit dem entsprechenden vorherigen Wert Deiner Collection vergleichen, z.B. mit der MID - Funktion. Sind die Einträge unterschiedlich, schiebst Du den zusätzlichen "kurzen" davor und erst eine Zeile später den richtigen ...
Wenn der Code von Dir ist, sollte die Programmierung kein Problem sein. Falls nicht, melde Dich nochmal.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
in Deiner Beispieltabelle sind die Daten zuerst nach Spalte A sortiert. Dadurch könntest Du beim Eintrag in die Tabelle vom einzutragenden Inhalt die Buchstabenkombination mit dem entsprechenden vorherigen Wert Deiner Collection vergleichen, z.B. mit der MID - Funktion. Sind die Einträge unterschiedlich, schiebst Du den zusätzlichen "kurzen" davor und erst eine Zeile später den richtigen ...
Wenn der Code von Dir ist, sollte die Programmierung kein Problem sein. Falls nicht, melde Dich nochmal.
Hallo schauan, die Codierung gehört nicht mir. Kannst du bitte dabei helfen? Danke Vg Juilias
zum Beispielcode gehört noch die größere Dimensionierung des Arrays
Code:
ReDim avntErgebnis(1 To colA.Count * colB.Count + colA.Count, 1 To 1)
Eine fehlerhafte Zusammenstellung gibts übrigens nicht nur am Ende. Wenn Du mal irgendwo einen Namen änderst, z.B. in Otto, dann bekommst Du diesen in allen Gruppen und nicht nur dort, wo Du ihn geändert hast.
Als Lösung würde sich da eine Collection anbieten und nicht zwei. Schaue ich mir heute Abend noch mal an.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
hier ist jetzt der code. Ich habe einige Kommentare drin und hoffe, dass Dir das weiter hilft.
Code:
Sub Schaltfläche1_Klicken()
Dim vntElement As Variant Dim arrElement As Variant Dim colA As Collection Dim lngIndexA As Long
Dim avntErgebnis() As Variant Dim iavntErgebnis As Long Dim vehicleCodeNumber As Long Dim ptMatchingPart As Long
Set colA = New Collection 'Daten in Array uebernehmen arrElement = Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp).Offset(1, 1)).Value 'Schleife ueber alle Arrayelemente For icnt = LBound(arrElement, 1) To UBound(arrElement, 1) 'wenn erstes Feld des aktuellen Arrayeintrags nicht leer ist, dann If Not IsEmpty(arrElement(icnt, 1)) Then 'Collectionelement aus erstem und zweitem Feld des aktuellen Arrayeintrages bilden Call UnikateSammeln(colA, arrElement(icnt, 1) & " " & arrElement(icnt, 2)) ' Element in Array hinzufügen 'ab dem zweiten Schleifendurchlauf If icnt > 1 Then 'Wenn sich die Vehiclecodenummer aendert, dann If arrElement(icnt, 1) <> arrElement(icnt - 1, 1) Then 'Vehiclecodenummer 1 hochsetzen vehicleCodeNumber = vehicleCodeNumber + 1 'Ende Wenn sich die Vehiclecodenummer aendert, dann End If 'Ende ab dem zweiten Schleifendurchlauf End If 'Ende wenn erstes Feld des aktuellen Arrayeintrags nicht leer ist, dann End If 'Ende Schleife ueber alle Arrayelemente Next Range(Cells(2, 3), Cells(2, 3).End(xlDown)).ClearContents 'Array dimensioniren anhand collectioneintraegen und vehiclecodenummern ReDim avntErgebnis(1 To colA.Count + vehicleCodeNumber + 1, 1 To 1) 'Zaehler auf Startwert setzen vehicleCodeNumber = 1 iavntErgebnis = 1 ptMatchingPart = 1 'Schleife ueber alle Collectioneintraege For lngIndexA = 1 To colA.Count 'Wenn der Schleifenzaehler groesser 1 ist, dann If lngIndexA > 1 Then 'Wenn der vehiclecode sich aendert If Split(colA(lngIndexA - 1), " ")(0) <> Split(colA(lngIndexA), " ")(0) Then 'arrayeintrag ohne Name bilden avntErgebnis(iavntErgebnis, 1) = "Total " & Chr(34) & " CODE " & _ vehicleCodeNumber & Chr(34) & " " & Chr(34) & "PART " & ptMatchingPart & Chr(34) & " - " & Split(colA(lngIndexA - 1), " ")(0) 'Zaehler setzen vehicleCodeNumber = vehicleCodeNumber + 1 iavntErgebnis = iavntErgebnis + 1 'Counter ptMatchingPart = 1 'Ende Wenn der vehiclecode sich aendert End If 'Ende Wenn der Schleifenzaehler groesser 1 ist, dann End If 'arrayeintrag mit Name bilden avntErgebnis(iavntErgebnis, 1) = "Total " & Chr(34) & " CODE " & _ vehicleCodeNumber & Chr(34) & " " & Chr(34) & "PART " & ptMatchingPart & Chr(34) & " - " & _ colA(lngIndexA) 'Zaehler setzen ptMatchingPart = ptMatchingPart + 1 'Counter iavntErgebnis = iavntErgebnis + 1 'Counter 'Ende Schleife ueber alle Collectioneintraege Next 'letzter Vehicle-Eintrag avntErgebnis(iavntErgebnis, 1) = "Total " & Chr(34) & " CODE " & _ vehicleCodeNumber & Chr(34) & " " & Chr(34) & "PART " & ptMatchingPart & Chr(34) & " - " & Split(colA(lngIndexA - 1), " ")(0) 'Ausgabe Cells(2, 3).Resize(iavntErgebnis).Value = avntErgebnis Set colA = Nothing ' referenzierten Objekts freigegeben End Sub
Private Sub UnikateSammeln(ByRef colSammlung As Collection, ByVal vntElement As Variant) On Error Resume Next colSammlung.Add vntElement, CStr(vntElement) On Error GoTo 0 End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)