Hallo! Ich bin mir gar nicht sicher, ob das von mir Geplante so überhaupt umsetzbar ist aber here we go:
Ich habe eine große Liste mit vielen Daten, welche innerhalb der Zellen getrennt sind durch "(1),(2),(3) etc.". Ich möchte gerne jeden einzelnen Unterpunkt innerhalb der Zellen zu einer eigenen Zelle machen, der Datensatz ist aber viel zu groß, um das manuell zu machen. Ist es möglich, mit einer Formel den Bereich nach einem "(n)" zu splitten, in die darunterstehende Zelle zu packen und das ganze für alle "(n)" zu wiederholen?
Veranschaulichung (hoffentlich
) ist anbei.
Hallo
versuch es mal hiermit.
in ein Normales Modul
Code:
Sub Trennen()
Dim Sp As Integer, Z1 As Integer, LR As Integer, Anz As Integer, i As Integer
Sp = 1 'Daten stehen in A
Z1 = 2 'ggf wegen überschrift
LR = Cells(Rows.Count, Sp).End(xlUp).Row 'letzte Zeile der Spalte
'Bereich markieren
For i = LR To Z1 Step -1
Anz = Len(Cells(i, Sp)) - Len(Replace(Cells(i, Sp), ",", ""))
Rows(i + 1).Resize(Anz).Insert
Cells(i, Sp + 1).Resize(Anz + 1, 1) = WorksheetFunction.Transpose(Split(Cells(i, Sp), ","))
Next
End Sub
LG UweD
Hallo Uwe und danke für deine Antwort!
Ich habe es geschafft die Zelleninhalte zu trennen und in jeweils eigene Zellen zu überführen und diese zu transponieren. Mir fehlt jetzt quasi nur noch ein Code, der die nebeneinanderstehenden Blöcke von Zellen alle untereinander aufreiht. Veranschaulichung wieder anbei.
Ich glaube, dass das an sich nicht sehr komplex ist aber ich bin ein blutiger Anfänger mit VBA
Hallo nochmal
so?
Code:
Sub untereinander()
Dim LC As Integer, LRx As Integer, LRz As Integer, Z1 As Integer, Sp As Integer, i As Integer
Z1 = 2 'erste Datenzeile
LC = Cells(Z1, Columns.Count).End(xlToLeft).Column 'letzte Spalte einer Zeile
For i = 1 To LC
LRx = Cells(Rows.Count, i).End(xlUp).Row 'letzte Zeile der Spalte
LRz = Cells(Rows.Count, LC + 2).End(xlUp).Row
Cells(LRz + 1, LC + 2).Resize(LRx - Z1 + 1, 1).Value = Cells(Z1, i).Resize(LRx - Z1 + 1, 1).Value
Next
End Sub
LG UweD
Hast du ne Idee was ich hier falsch mache?
Liebe Grüße
Hallo,
wenn du VBA nimmst, dann doch gleich eine VBA-Funktion. Gesplittet wird am Komma und der Anzahl der Teile (hier 4).
(s. Mappe)
Gruß Sigi
Das hab ich ja schon gelöst bekommen. Am Komma konnte ich nicht splitten, weil der Text innerhalb der Punkte Kommas enthielt, was zu splits an den falschen Stellen führte. Ich habe mit Suchen und ersetzen die Klammern samt Nummer durch "\" ersetzt, weil es im restlichen Dokument sonst nirgends vorkam und dann am \ gesplittet. Dadurch habe ich jetzt halt diese nebeneinanderstehenden Zellen und grüble grade daran wie ich die alle untereinander kriege.
Liebe Grüße
Hi,
würdest Du an Stelle der Bildchen eine Musterdatei mit den Wunschergebnissen vorstellen, wäre es leichter Dir zu helfen. Aber mit sinnvollen Ausdrücken und nicht wie in den bisher gezeigten Bildern!
Hi,
vielleicht hilft Dir das weiter:
Code:
Sub test()
Dim lngCount As Long
Dim lnglRow As Long
Dim lngTemp As Long
Dim ArrText As String
Dim ArrField() As String
lnglRow = Cells(Rows.Count, 1).End(xlUp).Row
For lngCount = 1 To lnglRow
ArrText = ArrText & Replace(Replace(Replace(Replace(Cells(lngCount, 1), "(1)", "#"), ",(2)", "#"), ",(3)", "#"), ",(4)", "#")
Next
Debug.Print ArrText
lngTemp = Len(ArrText) - Len(Replace(ArrText, "#", ""))
ReDim ArrField(lngTemp - 1)
ArrField = Split(ArrText, "#")
For lngCount = 0 To UBound(ArrField())
Cells(lngCount + 1, 5) = ArrField(lngCount)
Next
End Sub
Ich glaube ich habe das ganze wirklich etwas konfus dargestellt. Sorry dafür!
Im Grunde brauche ich einen Code, der von der ersten Spalte an die Zellen von oben nach unten liest und Zellen, welche nicht leer sind ausschneidet und in der A-Spalte untereinander einfügt. Wenn dann eine leere Zelle gefunden wird soll zur nächsten Spalte übergegangen werden und so weiter.
Ich habe also eine große Menge an nebeneinander aufgelisteten Werten und möchte diese in einer einzigen Spalte (in diesem Fall A) untereinander aufführen.
Liebe Grüße