Excel Zelle trennen und in Spalten umwandeln?
Hallo,
aufgrund der "Corona" Krise, muss ich mein Geschäft leider mit Online-Shopping am leben halten.
Um die Hersteller Excel CSV Daten importieren zu können, muss ich diese vorab etwas bearbeiten. Vielleicht gibt es für mein Problem eine Automatisierung?
Ich habe folgende Beispiel Tabelle:
Spalte A | Spalte B | Spalte C
Hemd XY | Grün, Blau, Weiß | L,M
Ich brauche diese für meine Shop wie folgt.
Hemd XY | Grün | L
Hemd XY | Grün | M
Hemd XY | Blau | L
Hemd XY | Blau | M
Hemd XY | weiß| L
Hemd XY | weiß | M
Also Spalte B und C sollen nach dem Komma getrennt werden und der ganze Artikel in eine neue Zeile geschrieben werden. Wobei Spalte C für jede Farbe erscheinen soll.
Vielleicht kann mir da jmd behilflich sein. Bis ich dies händisch angepasst habe, ist die Krise vorbei.
Danke
VG
Siggi
2 Antworten
Hallo, allein per Formel ist es nicht lösbar aber mit einem Makro und etwas Vorbereitung:
Zunächst die Spalten aufteilen, dafür hat Excel die Funktion "Text in Spalten" in der Registerkarte "Daten", meine Testtabelle sah danach so aus:
Die Formeln die du brauchst, stehen dort ebenfalls. Von dem Strg wird ANZAHL2(B2:D2) verdeckt.
Dann kannst du dieses Makro ausführen (den Bereich der ersten Forschleife und ggf. dem Ausgabeblattnamen natürlich noch anpassen) und solltest zum gewünschten Ergebnis kommen:
Sub hemden()
Dim hemd As String
Dim Farbe As String
Dim Groesse As String
Dim s As Long
Dim e As Long
Dim i As Long
Dim af As Long
Dim ag As Long
Dim ungerade As Long
Dim ingZeile As Long
'ingZeile = 2
For ingZeile = 2 To 3 'an deine Zeilen anpassen
af = ActiveSheet.Cells(ingZeile, 8)
ag = ActiveSheet.Cells(ingZeile, 9)
s = ActiveSheet.Cells(ingZeile, 10)
e = ActiveSheet.Cells(ingZeile, 11)
hemd = ActiveSheet.Cells(ingZeile, 1)
For i = s To e
ThisWorkbook.Sheets("CSVexport").Cells(i, 1) = hemd
If s Mod 2 = 1 Then
ungerade = i - 1
Else
ungerade = i
End If
If ungerade Mod ag = 0 Then
Groesse = ActiveSheet.Cells(ingZeile, 5)
Else
If ungerade Mod ag = 1 Then
Groesse = ActiveSheet.Cells(ingZeile, 6)
Else
Groesse = ActiveSheet.Cells(ingZeile, 7)
End If
End If
ThisWorkbook.Sheets("CSVexport").Cells(i, 3) = Groesse
If ungerade Mod af = 0 Then
Farbe = ActiveSheet.Cells(ingZeile, 2)
Else
If ungerade Mod af = 1 Then
Farbe = ActiveSheet.Cells(ingZeile, 3)
Else
Farbe = ActiveSheet.Cells(ingZeile, 4)
End If
End If
ThisWorkbook.Sheets("CSVexport").Cells(i, 2) = Farbe
Next i
Next ingZeile
End Sub

Bitte^^
Mir fiel aber gerade auf das ich einen Denkfehler gemacht habe und es so aktuell nur richtig funktioniert, wenn es für jedes Hemd genau 3 Farben und 2 Größen gibt.
OK, das wäre schlecht :-(. Konnte es auch noch nicht probieren. Gerade alles ein bisschen durcheinander :-)
So, dieses kann es jetzt richtig zumindest für jede Kombination aus 1-3 Größen und 1-3 Farben , reicht das oder kommen noch andere vor? :D
Sub hemden()
Dim hemd As String
Dim Farbe As String
Dim Groesse As String
Dim s As Long
Dim e As Long
Dim i As Long
Dim af As Long
Dim ag As Long
Dim farbpos As Long
Dim Groessepos As Long
Dim ingZeile As Long
ingZeile = 2
For ingZeile = 2 To 6
af = ActiveSheet.Cells(ingZeile, 8)
ag = ActiveSheet.Cells(ingZeile, 9)
s = ActiveSheet.Cells(ingZeile, 10)
e = ActiveSheet.Cells(ingZeile, 11)
hemd = ActiveSheet.Cells(ingZeile, 1)
For i = s To e
ThisWorkbook.Sheets("CSVexport").Cells(i, 1) = hemd
Next i
af = ActiveSheet.Cells(ingZeile, 8)
ag = ActiveSheet.Cells(ingZeile, 9)
h = af * ag
For f = 1 To h
If f Mod af = 1 Or af = 1 Then
farbpos = 1
Else
farbpos = farbpos + 1
End If
Farbe = ActiveSheet.Cells(ingZeile, 1 + farbpos)
ThisWorkbook.Sheets("CSVexport").Cells(s - 1 + f, 2) = Farbe
Next f
Groessepos = 0
For k = 1 To h
If Not k Mod af = 1 And Not af = 1 Then
Groessepos = Groessepos
Else
Groessepos = Groessepos + 1
End If
Groesse = ActiveSheet.Cells(ingZeile, 4 + Groessepos)
ThisWorkbook.Sheets("CSVexport").Cells(s - 1 + k, 3) = Groesse
Next k
Next ingZeile
End Sub
Auf dem Screenshot hatte ich auch noch einen Fehler entdeckt gehabt: In Spalte I muss natürlich der Bereich E2:G2 statt E2:F2 usw. rein.
Danke für die Mühe. Es kommen auch andere Größen und Farben vor.
Machmal gibt es ein Produkt nur in Größe L mit 5 Farben, das andere wiederum in 3 Größen mit 2 farben.... als Beispiel. :-(
Habe gerade probiert, da fängt das Problem schon mit "Text in Spalten" an. Er versucht dann die Spalten neben an zu überschreiben. Sprich ich muss erst einmal neue leere Spalten anlegen. Korrekt? Danach erst "Text in Spalten"....
Ja, erst soviele dazwischen schieben wie du brauchen wirst und dann erst "Text in Spalten", das vergaß ich zu erwähnen. Theoretisch müsstest du dann auch nur den Bereich in den Formeln und die Spaltenzahl hier anpassen, dann sollte es auch für mehr Varianten gehen:
af = ActiveSheet.Cells(ingZeile, 8)
ag = ActiveSheet.Cells(ingZeile, 9)
s = ActiveSheet.Cells(ingZeile, 10)
e = ActiveSheet.Cells(ingZeile, 11)
und diese 4 an die Position der letzten aArbe
Groesse = ActiveSheet.Cells(ingZeile, 4 + Groessepos)
Das ist machbar. Dazu würde ich die Spalte A und B in ein neues Tabellenblatt einfügen - die Spalte B über Daten - Trennen - Zeichen(auswählen) die Inhalte auf folgende Spalten aufteilen.
Danach das gleiche mit der Spalte C machen.
Im Anschluß kannst Du die Daten der einzelnen Spalten über die Funktion "Verketten" in einer Spalte zusammenführen.
Puuh, Wahnsinn. Vielen lieben Dank. Muss ich gleich mal probieren... Merci