Aufteilen von Informationen in Zeilen (Microsoft Excel)
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: