Excel Zelle trennen und in Spalten umwandeln?

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:

Bild zum Beitrag

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


 - (Microsoft Excel, VBA, csv)
Southtown 
Fragesteller
 26.03.2020, 12:38

Puuh, Wahnsinn. Vielen lieben Dank. Muss ich gleich mal probieren... Merci

1
DanKirpan  26.03.2020, 13:05
@Southtown

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.

1
Southtown 
Fragesteller
 26.03.2020, 14:43
@DanKirpan

OK, das wäre schlecht :-(. Konnte es auch noch nicht probieren. Gerade alles ein bisschen durcheinander :-)

1
DanKirpan  26.03.2020, 15:05
@Southtown

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.

1
Southtown 
Fragesteller
 26.03.2020, 15:29
@DanKirpan

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. :-(

1
Southtown 
Fragesteller
 26.03.2020, 15:34
@Southtown

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"....

1
DanKirpan  26.03.2020, 15:38
@Southtown

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)

1

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.

Woher ich das weiß:eigene Erfahrung