PDA

View Full Version : [SOLVED:] Transpose rows to columns



nilu198
11-20-2016, 01:34 AM
Sir,
I have one query how do i convert horizontal data into the vertical data one below the another ?
for eg :-




Roll
Employee name
Dept
Designation
Function
SHIFT
D1
D2
D3
D4
D5
D6
D7
D8
D9
D10
D11
D12
D13
D14
D15
D16
D17
D18
D19
D20
D21
D22
D23
D24
D25
D26
D27
D28
D29
D30


40001744
Alex
HTM
Supervisor
O&M
SHIFT
S2
S2
S2
S2
WO
H3
H3
H3
H3
H3
H3
WO
F2
F2
F2
F2
F2
F2
WO
T2
T2
T2
T2
T2
T2
WO
S2
S2
S2
S2


41010320
Ashok
HTM
Mazdoor
O&M
SHIFT
S2
S2
S2
S2
WO
H3
H3
H3
H3
H3
H3
WO
F2
F2
F2
F2
F2
F2
WO
T2
T2
T2
T2
T2
T2
WO
S2
S2
S2
S2


41012881
Vinayak
HTM
Mazdoor
O&M
SHIFT
S2
S2
S2
S2
WO
H3
H3
H3
H3
H3
H3
WO
F2
F2
F2
F2
F2
F2
WO
T2
T2
T2
T2
T2
T2
WO
S2
S2
S2
S2


40009881
Deepak
HTM
Supervisor
O&M
SHIFT
T2
T2
T2
T2
WO
T2
S2
S2
S2
S2
S2
WO
S2
H3
H3
H3
H3
H3
WO
F2
F2
F2
F2
F2
F2
WO
F2
T2
T2
T2


should be converted into



ROLL
TYPE
START_DT
END_DT
SHIFT


40001744
2
01.06.2016
01.06.2016
S2


40001744
2
02.06.2016
02.06.2016
S2


40001744
2
03.06.2016
03.06.2016
S2


40001744
2
04.06.2016
04.06.2016
S2


40001744
2
05.06.2016
05.06.2016
WO


40001744
2
06.06.2016
06.06.2016
H3


40001744
2
07.06.2016
07.06.2016
H3


40001744
2
08.06.2016
08.06.2016
H3


40001744
2
09.06.2016
09.06.2016
H3


40001744
2
10.06.2016
10.06.2016
H3


40001744
2
11.06.2016
11.06.2016
H3


40001744
2
12.06.2016
12.06.2016
WO


40001744
2
13.06.2016
13.06.2016
F2


40001744
2
14.06.2016
14.06.2016
F2


40001744
2
15.06.2016
15.06.2016
F2


40001744
2
16.06.2016
16.06.2016
F2


40001744
2
17.06.2016
17.06.2016
F2


40001744
2
18.06.2016
18.06.2016
F2


40001744
2
19.06.2016
19.06.2016
WO


40001744
2
20.06.2016
20.06.2016
T2


40001744
2
21.06.2016
21.06.2016
T2


40001744
2
22.06.2016
22.06.2016
T2


40001744
2
23.06.2016
23.06.2016
T2


40001744
2
24.06.2016
24.06.2016
T2


40001744
2
25.06.2016
25.06.2016
T2


40001744
2
26.06.2016
26.06.2016
WO


40001744
2
27.06.2016
27.06.2016
S2


40001744
2
28.06.2016
28.06.2016
S2


40001744
2
29.06.2016
29.06.2016
S2


40001744
2
30.06.2016
30.06.2016
S2


40009881
2
01.06.2016
01.06.2016
T2


40009881
2
02.06.2016
02.06.2016
T2


40009881
2
03.06.2016
03.06.2016
T2


40009881
2
04.06.2016
04.06.2016
T2


40009881
2
05.06.2016
05.06.2016
WO


40009881
2
06.06.2016
06.06.2016
T2


40009881
2
07.06.2016
07.06.2016
S2


40009881
2
08.06.2016
08.06.2016
S2


40009881
2
09.06.2016
09.06.2016
S2


40009881
2
10.06.2016
10.06.2016
S2


40009881
2
11.06.2016
11.06.2016
S2


40009881
2
12.06.2016
12.06.2016
WO


40009881
2
13.06.2016
13.06.2016
S2


40009881
2
14.06.2016
14.06.2016
H3


40009881
2
15.06.2016
15.06.2016
H3


40009881
2
16.06.2016
16.06.2016
H3


40009881
2
17.06.2016
17.06.2016
H3


40009881
2
18.06.2016
18.06.2016
H3


40009881
2
19.06.2016
19.06.2016
WO


40009881
2
20.06.2016
20.06.2016
F2


40009881
2
21.06.2016
21.06.2016
F2


40009881
2
22.06.2016
22.06.2016
F2


40009881
2
23.06.2016
23.06.2016
F2


40009881
2
24.06.2016
24.06.2016
F2


40009881
2
25.06.2016
25.06.2016
F2


40009881
2
26.06.2016
26.06.2016
WO


40009881
2
27.06.2016
27.06.2016
F2


40009881
2
28.06.2016
28.06.2016
T2


40009881
2
29.06.2016
29.06.2016
T2


40009881
2
30.06.2016
30.06.2016
T2


41010320
2
01.06.2016
01.06.2016
S2


41010320
2
02.06.2016
02.06.2016
S2


41010320
2
03.06.2016
03.06.2016
S2


41010320
2
04.06.2016
04.06.2016
S2


41010320
2
05.06.2016
05.06.2016
WO


41010320
2
06.06.2016
06.06.2016
H3


41010320
2
07.06.2016
07.06.2016
H3


41010320
2
08.06.2016
08.06.2016
H3


41010320
2
09.06.2016
09.06.2016
H3


41010320
2
10.06.2016
10.06.2016
H3


41010320
2
11.06.2016
11.06.2016
H3


41010320
2
12.06.2016
12.06.2016
WO


41010320
2
13.06.2016
13.06.2016
F2


41010320
2
14.06.2016
14.06.2016
F2


41010320
2
15.06.2016
15.06.2016
F2


41010320
2
16.06.2016
16.06.2016
F2


41010320
2
17.06.2016
17.06.2016
F2


41010320
2
18.06.2016
18.06.2016
F2


41010320
2
19.06.2016
19.06.2016
WO


41010320
2
20.06.2016
20.06.2016
T2


41010320
2
21.06.2016
21.06.2016
T2


41010320
2
22.06.2016
22.06.2016
T2


41010320
2
23.06.2016
23.06.2016
T2


41010320
2
24.06.2016
24.06.2016
T2


41010320
2
25.06.2016
25.06.2016
T2


41010320
2
26.06.2016
26.06.2016
WO


41010320
2
27.06.2016
27.06.2016
S2


41010320
2
28.06.2016
28.06.2016
S2


41010320
2
29.06.2016
29.06.2016
S2


41010320
2
30.06.2016
30.06.2016
S2


41012881
2
01.06.2016
01.06.2016
S2


41012881
2
02.06.2016
02.06.2016
S2


41012881
2
03.06.2016
03.06.2016
S2


41012881
2
04.06.2016
04.06.2016
S2


41012881
2
05.06.2016
05.06.2016
WO


41012881
2
06.06.2016
06.06.2016
H3


41012881
2
07.06.2016
07.06.2016
H3


41012881
2
08.06.2016
08.06.2016
H3


41012881
2
09.06.2016
09.06.2016
H3


41012881
2
10.06.2016
10.06.2016
H3


41012881
2
11.06.2016
11.06.2016
H3


41012881
2
12.06.2016
12.06.2016
WO


41012881
2
13.06.2016
13.06.2016
F2


41012881
2
14.06.2016
14.06.2016
F2


41012881
2
15.06.2016
15.06.2016
F2


41012881
2
16.06.2016
16.06.2016
F2


41012881
2
17.06.2016
17.06.2016
F2


41012881
2
18.06.2016
18.06.2016
F2


41012881
2
19.06.2016
19.06.2016
WO


41012881
2
20.06.2016
20.06.2016
T2


41012881
2
21.06.2016
21.06.2016
T2


41012881
2
22.06.2016
22.06.2016
T2


41012881
2
23.06.2016
23.06.2016
T2


41012881
2
24.06.2016
24.06.2016
T2


41012881
2
25.06.2016
25.06.2016
T2


41012881
2
26.06.2016
26.06.2016
WO


41012881
2
27.06.2016
27.06.2016
S2


41012881
2
28.06.2016
28.06.2016
S2


41012881
2
29.06.2016
29.06.2016
S2


41012881
2
30.06.2016
30.06.2016
S2




Kindly provide the VBA Code for the above conversion, as the formula is complex, I havre 250 to 300 rows like this.

Thanks

KevO
11-25-2016, 01:41 AM
Try this
Runs in attached workbook with {CTRL} + t


Sub TransposeData()

'variables
Dim rollRange As Range, dateRange, x As Range, y As Range
Dim wsDATA As Worksheet, wsRESULTS As Worksheet
Dim rN As Long

'set up references to worksheets and ranges
Set wsDATA = Sheets("Data")
Set wsRESULTS = Sheets("Results")
With wsDATA
Set rollRange = .Range("A2", .Range("A1").End(xlDown))
Set dateRange = .Range("G1", .Range("A1").End(xlToRight))
End With

'clear previous results while testing (DELETE THIS LINE When testing completed)
wsRESULTS.UsedRange.Offset(1, 0).Clear


With wsRESULTS

'=current last row in Results
rN = .Range("A1048576").End(xlUp).Row

'loop through each employee
For Each x In rollRange

'loop through each date
For Each y In dateRange
rN = rN + 1
'build results table
.Cells(rN, 1) = x.Value '=Roll
.Cells(rN, 2) = "2" '=Type
.Cells(rN, 3) = y.Value '=Start
.Cells(rN, 4) = y.Value '=End
.Cells(rN, 5) = wsDATA.Cells(x.Row, y.Column) 'Shift
Next y
Next

'look at results
.Activate
.Range("A1").Select

End With
End Sub

nilu198
11-25-2016, 11:26 AM
AlexO,

Thanks a ton Sir,

Regards

Neelesh S

KevO
11-25-2016, 12:25 PM
You are welcome :)
If your problem is solved, please click on ThreadTools (top of thread) and mark the thread as solved.
if anything in the code is unclear etc, please ask for clarification.
kev