Hallo Frankie,
dann teste folgenden Code:
Code:
Sub zusammenführen()
Dim i As Long, j As Long, zZ As Long
Dim lngZ As Long
Dim arr
Application.ScreenUpdating = False
Columns("D:E").ClearContents 'Inhalte der Spalten D:E löschen zur Aufnahme der neuen Werte
lngZ = Cells(Rows.Count, 1).End(xlUp).Row
zZ = 2 ' ab Zeile 2 werden Werte reingeschrieben
For i = 2 To lngZ
If Cells(i, 1) <> "" Then
arr = Split(Replace(Split(Cells(i, 1), ": ")(1), ",", "-"), "-")
If UBound(arr) Then
For j = LBound(arr) To UBound(arr)
Cells(zZ, 4) = Replace(arr(j), ")", "")
Cells(zZ, 5) = Cells(i, 2)
zZ = zZ + 1
Next j
End If
End If
Next i
Application.ScreenUpdating = True
End Sub
Zitat:Könntest vielleicht erklären was genau in dieser Zeile passiert und wie ich das ) weg bekomme: Split(Replace(Split(Cells(i, 1), ": ")(1), ",", "-"), "-")
Der Ausdruck wird von der innersten Klammer nach außen abgearbeitet.
Split trennt Inhalte nach vorgegebenen Zeichen.
Zuerst wird der Zellinhalt nach Doppelpunkt mit folgendem Leerzeichen getrennt. Es entsteht ein Array mit zwei werten.
Auf Dein eingestelltes Beispiel bezogen ist es einmal "(Pl1: " und einmal "T13202-T13202,T13201-T13202)"
Das macht dieser Ausdruck:
Split(Cells(i, 1), ": ")
Arrays sind Null basiert, das heißt das erste Element ist das "Nullte" und das zweite ist das "Erste"
Dass ich die Zahlen im zweiten Element brauche sage ich, indem ich hinter dem Ausdruck in Klammern eine 1 schreibe:
Split(Cells(i, 1), ": ")(1)
Da die Zahlen mit unterschiedlichen Zeichen getrennt sind, vereinheitliche sie, indem ich Kommata mit Bindestrich ersetze:
Replace(Split(Cells(i, 1), ": ")(1), ",", "-")
Nun Splitte ich sie ein letztes mal nach Bindestrich:
Split(Replace(Split(Cells(i, 1), ": ")(1), ",", "-"), "-")
Somit habe ich ein Array mit 4 Elementen, die ich in einer Schleife abarbeite.
Die Klammer hatte ich übersehen. Die kann man dann noch einmal mit Replace beim durchlaufen der Elemenete des Array einfach mit "nichts" ersetzen:
Replace(arr(j), ")", "")
Damit Leerzellen nicht betrachtet werden, habe ich um das Ganze noch eine IF Abfrage gebaut, die schaut ob die Zelle nicht leer ist.
In der Onlinehilfe findest Du auch Erklärungen zur Split und Replace Funktion.
Wenn Du im Code den Cursor innerhalb eines der Begriffe setzt und die Funktionstaste F1 betätigst, gelangst Du direkt zu den betreffenden Seiten.