2014-10-03 2 views
-1

Я регулярно сталкиваюсь с необходимостью перечислить список элементов, привязанных к идентификатору (например, номер заказа), и сдвинуть его на одну запись.Изменение вертикальных данных Excel по горизонтали [NOT TRANSPOSE]

т.е.

a | b 
101 | medium t-shirt 
101 | medium socks 

в

a | b    | c 
101 | medium t-shirt | medium socks 

Любые идеи о том, как легко это сделать? Имея в виду, я хочу сделать это в списке 500 строк.

+1

Да - вы можете использовать VBA для этого. –

ответ

0

Основываясь на приведенном примере что-то, как это должно работать (я говорю РЕКОМЕНДУЕМЫМ, потому что у меня нет Excel под рукой, так что код не тестировался):

Sub JoinByID() 

    Dim dct As Dictionary 
    Dim i As Long, j As Long 
    Dim iIDCol As Integer 
    Dim rFirst As Range 
    Dim sID As String 
    Dim col As Collection 
    Dim ws As Worksheet, wsNew As Worksheet 
    Dim vLoopIDs As Variant, vLoopVals As Variant 

    Set rFirst = Sheets(1).Range("A1") 'change to where your data starts 
    Set ws = rFirst.Parent 
    iIDCol = rFirst.Column 
    ' loop through data and collect based on ID 
    For i = rFirst.Row + 1 To rFirst.End(xlDown).Row 
     sID = ws.Cells(i, iIDCol).Value 
     If dct.Exists(sID) Then 
      dct(sID).Add ws.Cells(i, iIDCol + 1).Value 
     Else 
      Set col = New Collection 
      col.Add ws.Cells(i, iIDCol + 1).Value 
      dct.Add sID, col 
     End If 
    Next i 

    ' drop the data in a new sheet 
    Set wsNew = Worksheets.Add 
    i = 0 
    With wsNew 
     For Each vLoopIDs In dct.Keys 
      i = i + 1 
      .Cells(i, 1) = vLoop 
      j = 1 
      For Each vLoopVals In dct(vLoop) 
       j = j + 1 
       .Cells(i, j) = vLoopVals 
      Next vLoopVals 
     Next vLoopIDs 
    End With 

End Sub 

Примечание: вам нужно добавить ссылку на Runtime Microsoft Scripting Runtime, чтобы иметь Dictionary.

0

Введите в C2:

=IF(D2=FALSE,B3,B2) 

в D2:

=ISODD(ROW()) 

и скопировать и вниз костюм.

Выделить все, скопировать, вставить специальные, значения сверху. Фильтр, чтобы выбрать TRUE в столбце D и удалить все видимые заголовки внизу. Отфильтровать, удалить фильтр и удалить ColumnD.

Смежные вопросы