Hi ,
Pl run the Splitcells subroutine. The unmerged data is stored in worksheet ("FinalData")
Sub SplitCells()
Dim rng As Range, ws As Worksheet, rngData As Range
Dim WorkRng As Range
Dim lLfs As Long, lRows As Long, lCols As Long
Dim i As Long, j As Long, lstRow As Long
Dim blnTmp As Boolean, blnFinalData As Boolean, blnNextRow As Boolean
Dim iLast As Long
On Error GoTo ErrorHandler:
Application.ScreenUpdating = False
For Each ws In ActiveWorkbook.Worksheets
If ws.Name = "tmp" Then blnTmp = True
If ws.Name = "FinalData" Then blnFinalData = True
Next ws
If Not blnTmp Then ActiveWorkbook.Worksheets.Add.Name = "tmp"
If Not blnFinalData Then ActiveWorkbook.Worksheets.Add.Name = "FinalData"
Set ws = ActiveWorkbook.Worksheets("Sample")
lRows = ws.UsedRange.Rows.Count
lCols = ws.UsedRange.Columns.Count
'clear the data in sht "FinalData" and add col headers
Worksheets("FinalData").Cells.Clear
For j = 1 To lCols
Worksheets("FinalData").Cells(1, j) = "Col" & j
Next j
lstRow = 2 'the row to be used for copying data on Finaldata sheet
With ws.UsedRange
For i = 1 To lRows
For j = 1 To lCols
Worksheets("tmp").UsedRange.Clear
.Cells(i, j).Copy Destination:=Worksheets("tmp").Range("A1")
Set rng = Worksheets("tmp").Range("A1")
lLfs = VBA.Len(rng) - VBA.Len(VBA.Replace(rng, vbLf, ""))
If lLfs > 0 Then
rng.Offset(1, 0).Resize(lLfs).Insert shift:=xlShiftDown
rng.Resize(lLfs + 1).Value = Application.WorksheetFunction.Transpose(VBA.Split(rng, vbLf))
rng.CurrentRegion.Copy Destination:=Worksheets("FinalData").Cells(lstRow, j)
Else
Worksheets("FinalData").Cells(lstRow, j).Value = .Cells(i, j).Value
End If
Next j
lstRow = Worksheets("FinalData").UsedRange.Find("*", LookIn:=xlValues, searchorder:=xlByRows, searchdirection:=xlPrevious).Offset(1, 0).Row
Next i
End With
Dim cl As Range
Set ws = ActiveWorkbook.Worksheets("FinalData")
Set rng = ws.UsedRange.SpecialCells(xlCellTypeBlanks)
For Each cl In rng
cl.Offset(-1, 0).Copy cl
Next cl
ws.Rows(1).Delete
ws.Columns.AutoFit
MsgBox "Unmerging of Data Complete!", vbInformation + vbOKOnly, "Task completed ..."
Exit Sub
ErrorHandler:
MsgBox "Err No" & Err.no & vbCrLf & _
"Err Description:" & Err.Description, vbCritical + vbOKOnly, "Error ..."
Application.ScreenUpdating = True
End Sub
Display More
It is preferable to have some data in each column.
Pl let me know if this is what you are looking for.
The file is attached.