Excel - A macro to transfer data from rows to columns

December 2016





Issue

The data now is in the below format

1 2 3   
9 15 16 20 25
1


This has to come in this format

1   
2
3
9
15
16
20
25
1

Solution

Assumptions:
  • 1. Data starts from Row 1 and is to be always copied to column A
  • 2. Rows can be inserted without distortion to data


Sub TransposeSpecial()  
Dim lMaxRows As Long 'max rows in the sheet
Dim lThisRow As Long 'row being processed
Dim iMaxCol As Integer 'max used column in the row being processed

lMaxRows = Cells(Rows.Count, "A").End(xlUp).Row

lThisRow = 1 'start from row 1

Do While lThisRow < lMaxRows

iMaxCol = Cells(lThisRow, Columns.Count).End(xlToLeft).Column

If (iMaxCol > 1) Then
Rows(lThisRow + 1 & ":" & lThisRow + iMaxCol - 1).Insert
Range(Cells(lThisRow, 2), Cells(lThisRow, iMaxCol)).Copy
Range("A" & lThisRow + 1).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Range(Cells(lThisRow, 2), Cells(lThisRow, iMaxCol)).Clear
lThisRow = lThisRow + iMaxCol - 1
lMaxRows = Cells(Rows.Count, "A").End(xlUp).Row
End If

lThisRow = lThisRow + 1
Loop
End Sub

Note that

Thanks to rizvisa1 for this tip on the forum.

Related :

This document entitled « Excel - A macro to transfer data from rows to columns » from CCM (ccm.net) is made available under the Creative Commons license. You can copy, modify copies of this page, under the conditions stipulated by the license, as this note appears clearly.