2011-05-26 25 views
0

我需要一点帮助,或者是一个VBA脚本,它可以按如下格式转换大数据集(960000行)。所有数据均在一列从一个长列转换为多列

TRIP_ID | OBJECTID | CPR_VEJNAV | ADM_VEJSTA | ADM_VEJKLA | vejid | vejkl | Shape_Length 
2626 | value | value  | value  | value  | value | value | value 
.. 
.. 
2626 | value | value  | value  | value  | value | value | value 
64646 | value | value  | value  | value  | value | value | value 
.. 
.. 
.. 
64646 | value | value  | value  | value  | value | value | value 

我想将数据转换成多列,一列每个TRIP_ID,就像这样:

TRIP_ID | .....  | TRIP_ID ..... | And so on 
2626 | .....  | 64646 ..... 
.. 
.. 
2626 | ...... | 64646  ..... 

等等,我有大约1800 TRIP_ID的 总之方面: 从一分长列转换,基于TRIP_ID

多列
+0

你是说在7个其他列('OBJECTID'等)中现在是在7个不同行的单列中? – 2011-05-26 20:36:00

回答

1

运行别人的代码之前,请务必使您的数据备份

Sub SplitToColumns() 

    Dim rCell As Range 
    Dim sCurrent As String 
    Dim rLast As Range 
    Dim lRowStart As Long 

    Application.EnableEvents = False 

    Set rLast = Sheet1.Range("A2").End(xlDown).Offset(1, 0) 
    rLast.Value = "End" 

    For Each rCell In Sheet1.Range("A2", rLast).Cells 
     If Split(rCell.Value, "|")(0) <> sCurrent Then 
      If lRowStart > 1 Then 
       rCell.Offset(lRowStart - rCell.Row, 0).Resize(rCell.Row - lRowStart, 1).Copy 
       Sheet1.Cells(2, Sheet1.Columns.Count).End(xlToLeft).Offset(0, 1).Resize(rCell.Row - lRowStart, 1).PasteSpecial xlValues 
      End If 
      lRowStart = rCell.Row 
      sCurrent = Split(rCell.Value, "|")(0) 
     End If 
    Next rCell 

    rLast.ClearContents 
    Application.CutCopyMode = False 
    Application.EnableEvents = True 

End Sub