Hallo YungKafa,
dann hier noch meine 3. VBA-Version:
Sub TransponierenSpezial_V3()
Dim rngB As Range
Dim varQ As Variant, varZ As Variant
Dim varTs As Variant, varTz As Variant
Dim i As Long, j As Long
'Zelle mit dem ersten Datensatz festlegen
Set rngB = Worksheets("Tabelle1").Range("A4") 'Blattnamen und Zelladresse entsprechend anpassen
'für das aktive Tabellenblatt auch so:
Set rngB = ActiveSheet.Range("A4") 'Zelladresse entsprechend anpassen
'Quellarray nimmt Daten der ersten Zelle, erweitert um die darunterliegenden Zeilen und 5 Spalten, auf:
varQ = Range(rngB, rngB.End(xlDown)).Resize(, 5).Value
'Urdimensionieung des Zielarrays:
ReDim varZ(1 To 5, 0 To 0)
'Schleife durch Zeilen des Quellarrays:
For i = 1 To UBound(varQ)
'Aufteilung Datensätze in einer Zelle nach Zeilenumbrüchen:
varTz = Split(varQ(i, 1), Chr(10))
'Erweiterung der letzten Dimension des Zielarrays um Anzahl neuer Datensätze:
ReDim Preserve varZ(1 To 5, 1 To UBound(varZ, 2) + UBound(varTz) + 1)
'Schleife durch Datensätze (ursprünglich einer Zelle):
For j = 0 To UBound(varTz)
varTs = Split(varTz(j), ":") 'Auftrennung einzelner DS nach ":"
If UBound(varTs) = 0 Then 'wenn die Aufteilung auf Spalten schon erfolgte,
'dann Einszueinsübertrag von Quellarray zu Zielarray:
varZ(1, UBound(varZ, 2) - UBound(varTz) + j) = varQ(i, 1)
varZ(2, UBound(varZ, 2) - UBound(varTz) + j) = varQ(i, 2)
varZ(3, UBound(varZ, 2) - UBound(varTz) + j) = varQ(i, 3)
varZ(4, UBound(varZ, 2) - UBound(varTz) + j) = varQ(i, 4)
varZ(5, UBound(varZ, 2) - UBound(varTz) + j) = varQ(i, 5)
Else
'sonst Spalte 1 umgewandelt ins Zielarray Spalten 1 und 2:
varZ(1, UBound(varZ, 2) - UBound(varTz) + j) = varTs(0)
varZ(2, UBound(varZ, 2) - UBound(varTz) + j) = varTs(1)
'Spalten vorher 2 bis 4 nach Spalten neu 3 bis 5:
varZ(3, UBound(varZ, 2) - UBound(varTz) + j) = varQ(i, 2)
varZ(4, UBound(varZ, 2) - UBound(varTz) + j) = varQ(i, 3)
varZ(5, UBound(varZ, 2) - UBound(varTz) + j) = varQ(i, 4)
End If
Next j
Next i
'transponiertes Zielarray wird zurückgeschrieben in Zellbereich:
rngB.Resize(UBound(varZ, 2), UBound(varZ, 1)).Value = Application.Transpose(varZ)
End Sub
Gruß Uwe