James hat einige Daten in einem Arbeitsblatt, das in einer Reihe von Zeilen enthalten ist. Eine der Spalten in den Daten enthält Zellen mit mehreren Zeilen pro Zelle. (Die Daten in der Zelle wurden durch Drücken von Alt + Eingabetaste zwischen Elementen in Zeilen getrennt.) James möchte diese Daten in mehrere Zeilen aufteilen. Wenn sich beispielsweise drei Datenzeilen in einer einzelnen Zelle in der Zeile befanden, sollten die Daten in dieser Zelle in drei Zeilen aufgeteilt werden.

Excel bietet eine praktische Möglichkeit, Daten mit dem Werkzeug Text in Spalten in separate Spalten aufzuteilen. Dies kann verwendet werden, um die Daten basierend auf dem Vorhandensein des ASCII 10-Zeichens aufzuteilen. Dies wird von Excel eingefügt, wenn Sie Alt + Eingabetaste drücken. Das Problem ist, dass die Daten zwar erfolgreich in separate Spalten aufgeteilt werden, jedoch nicht in separate Zeilen, wie von James angefordert.

Das bedeutet, dass die Lösung für dieses Problem die Verwendung eines Makros beinhalten muss. Ein Ansatz wird im folgenden Code gezeigt. In diesem Beispiel geht das Makro davon aus, dass Sie alles im Arbeitsblatt „erweitern“ möchten und dass die Daten im Arbeitsblatt in Zeile 1 beginnen.

Sub CellSplitter1()

Dim Temp As Variant     Dim CText As String     Dim J As Integer     Dim K As Integer     Dim L As Integer     Dim iColumn As Integer     Dim lNumCols As Long     Dim lNumRows As Long

iColumn = 4

Set wksSource = ActiveSheet     Set wksNew = Worksheets.Add

iTargetRow = 0     With wksSource         lNumCols = .Range("IV1").End(xlToLeft).Column         lNumRows = .Range("A65536").End(xlUp).Row         For J = 1 To lNumRows             CText = .Cells(J, iColumn).Value             Temp = Split(CText, Chr(10))

For K = 0 To UBound(Temp)

iTargetRow = iTargetRow + 1                 For L = 1 to lNumCols                     If L <> iColumn Then                         wksNew.Cells(iTargetRow, L) _                           = .Cells(J, L)

Else                         wksNew.Cells(iTargetRow, L) _                           = Temp(K)

End If                 Next L             Next K         Next J     End With End Sub

Beachten Sie, dass Sie zum Ausführen des Makros mithilfe der iColumn-Variablen die Spalte angeben müssen, die die zu teilenden Zellen enthält.

Wie hier geschrieben, teilt das Makro die Informationen in der vierten Spalte auf. Darüber hinaus werden die getrennten Versionen der Zellen in einem neuen Arbeitsblatt gespeichert, sodass das ursprüngliche Arbeitsblatt überhaupt nicht betroffen ist.

Das Makro basiert auf der Verwendung der Split-Funktion, um die mehrzeiligen Zellen auseinander zu reißen. Diese Funktion ist nur ab Excel 2000 verfügbar und in Excel für den Mac überhaupt nicht verfügbar. Darüber hinaus möchten Sie das Makro möglicherweise nur für eine bestimmte Auswahl von Zellen ausführen. Um all diese potenziellen Probleme zu lösen, sollten Sie stattdessen das folgende Makro in Betracht ziehen:

Sub CellSplitter2()

Dim iSplitCol As Integer     Dim iEnd As Integer     Dim sTemp As String     Dim iCount As Integer     Dim i As Integer     Dim wksNew As Worksheet     Dim wksSource As Worksheet     Dim lRow As Long     Dim lRowNew As Long     Dim lRows As Long     Dim lRowOffset As Long     Dim iTargetRows As Integer     Dim iCol As Integer     Dim iCols As Integer     Dim iColOffset As Integer     Dim AWF As WorksheetFunction

On Error GoTo ErrRoutine     Application.ScreenUpdating = False

'Set Column to split     iSplitCol = 4

iCols = Selection.Columns.Count     lRows = Selection.Rows.Count

iColOffset = Selection.Column - 1     lRowOffset = Selection.Row - 1     lRowNew = lRowOffset          Set wksSource = ActiveSheet     Set wksNew = Worksheets.Add

Set AWF = Application.WorksheetFunction     With wksSource         For lRow = (lRowOffset + 1) To (lRowOffset + lRows)

sTemp = .Cells(lRow, iSplitCol)

If Right(sTemp, 1) <> vbLf Then                 sTemp = sTemp & vbLf             End If             iCount = (Len(sTemp) - _               Len(AWF.Substitute(sTemp, vbLf, "")))



For iTargetRows = 1 To iCount                 lRowNew = lRowNew + 1                 For i = (iColOffset + 1) To (iColOffset + iCols)

If i <> iSplitCol Then                         wksNew.Cells(lRowNew, i) _                           = .Cells(lRow, i)

Else                         iEnd = InStr(sTemp, vbLf)

wksNew.Cells(lRowNew, i) _                           = Left(sTemp, iEnd - 1)

sTemp = Mid(sTemp, iEnd + 1)

End If                 Next i             Next iTargetRows         Next lRow     End With

ExitRoutine:

Set wksSource = Nothing     Set wksNew = Nothing     Set AWF = Nothing     Application.ScreenUpdating = True     Exit Sub

ErrRoutine:

MsgBox Err.Description, vbExclamation     Resume ExitRoutine End Sub

Das Makro ist weiterhin auf die Verwendung einer Variablen angewiesen, um die zu trennende Spalte anzugeben. In diesem Fall lautet die Variable iSplitCol und ist auf Spalte 4 festgelegt. Das Makro funktioniert nur für die Zellen, die beim ersten Ausführen ausgewählt wurden, und die aufgeteilten Zellen werden in ein neues Arbeitsblatt übertragen. Die Adresse der oberen linken Zelle im neuen Arbeitsblatt entspricht der oberen linken Zelle, die beim Ausführen des Makros ausgewählt wurde.

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (3263) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: