Forum Discussion
Eizenman
Nov 20, 2019Copper Contributor
Splitting a row with multiple lines of text to different rows
Hello all, I have an excel sheet in which some rows have multiple lines of text and some have only one line. I want to convert all those rows which have multiple lines to separate rows. See exa...
Eizenman
Nov 26, 2019Copper Contributor
I don't have a way to change how I get the data
JKPieterse
Nov 26, 2019Silver Contributor
Eizenman I'm not sure why you don't want to use VBA, but I couldn't come up with an easy alternative. The code below assumes all cells on a row contain the same number of "lines":
Option Explicit
Sub SplitTableROws()
Dim Data As Variant
Dim NewData As Variant
Dim SplitData As Variant
Dim DataRow As Long
Dim NewDataRow As Long
Dim Col As Long
Dim Line As Long
Data = ActiveSheet.Range("A1").CurrentRegion.Value
NewData = Application.Transpose(Data)
For DataRow = LBound(Data, 1) To UBound(Data, 1)
NewDataRow = NewDataRow + 1
If InStr(Data(DataRow, 1), Chr(10)) > 0 Then
ReDim Preserve NewData(1 To UBound(Data, 2), 1 To NewDataRow + UBound(Split(Data(DataRow, 1), Chr(10))))
For Col = LBound(Data, 2) To UBound(Data, 2)
SplitData = Split(Data(DataRow, Col), Chr(10))
For Line = LBound(SplitData) To UBound(SplitData)
NewData(Col, NewDataRow + Line) = SplitData(Line)
Next
Next
NewDataRow = NewDataRow + Line - 1
Else
ReDim Preserve NewData(1 To UBound(Data, 2), 1 To NewDataRow)
For Col = LBound(Data, 2) To UBound(Data, 2)
NewData(Col, NewDataRow) = Data(DataRow, Col)
Next
End If
Next DataRow
Range("F1").Resize(NewDataRow, UBound(Data, 2)).Value = Application.Transpose(NewData)
End Sub
- EizenmanNov 26, 2019Copper Contributor
JKPieterse I ran it but it just creates duplicated the column headers to the right of the existing columns without splitting the rows.
Am I supposed to take additional steps?
- JKPieterseNov 26, 2019Silver ContributorNo, but you must make sure there are no empty rows between row 1 and the remainder of the data. I took the sample data you posted and placed that little table in A1:D4