2013-11-07 5 views
2

Как преобразовать строки в столбце A в столбцы и строки в столбце B в одну строку?Преобразование строк Excel в столбцы

Вот моя текущая настройка:

ColumnA ColumnB 
    Question1 Answer1 
    Question2 Answer2 
    Question3 Answer3 
    Question4 Answer4 
    Question5 Answer5 
    Question1 Answer6 
    Question2 Answer7 
    Question3 Answer8 
    Question4 Answer9 
    Question5 Answer10 

То, что я хотел бы это:

Question1 Question2 Question3 Question4 Question5 
Answer1 Answer2 Answer3 Answer4 Answer5 
Answer6 Answer7 Answer8 Answer9 Answer10 
+0

Если таких групп не так много, вставка с транспозицией будет самым простым способом ... – tumchaaditya

+0

К сожалению, существует около 400000 строк, но да, я согласен с минимальными строками, их было бы легко транспонировать. – Tom

ответ

1

Я думаю, что это лучше всего решается с VBA макросов. Если вы получили текущую таблицу в Sheet1 и хотите сделать преобразование в Sheet2, тогда следующий макрос выполнит преобразование.

Option Explicit 
Sub ConvertRows() 
    Dim ws1 As Worksheet, ws2 As Worksheet 
    Dim i As Integer, j As Integer 
    Set ws1 = ActiveWorkbook.Sheets("Sheet1") 
    Set ws2 = ActiveWorkbook.Sheets("Sheet2") 

    'Lists each value from column 1 
    For i = 1 To ws1.Cells(Rows.Count, 1).End(xlUp).Row Step 1 
     For j = 1 To ws2.Cells(1, Columns.Count).End(xlToLeft).Column + 1 Step 1 
      If ws2.Cells(1, j).Value = ws1.Cells(i, 1).Value Then Exit For 
      If ws2.Cells(1, j).Value = vbNullString Then 
       ws2.Cells(1, j).Value = ws1.Cells(i, 1).Value 
       Exit For 
      End If 
     Next j 
    Next i 

    'Fills columns with matching values 
    For i = 1 To ws1.Cells(Rows.Count, 1).End(xlUp).Row Step 1 
     For j = 1 To ws2.Cells(1, Columns.Count).End(xlToLeft).Column Step 1 
      If ws2.Cells(1, j).Value = ws1.Cells(i, 1).Value Then 
       ws2.Cells(Rows.Count, j).End(xlUp).Offset(1, 0).Value = ws1.Cells(i, 2).Value 
      End If 
     Next j 
    Next i 
End Sub 
+0

Я переделал свой ответ. Надеюсь, это решит вашу проблему. –

+0

Спасибо, что редактирование отлично работало. – Tom

0

Метод NON-VBA:

Если вы имеете дело с разовой проблемой, простой способ обработки преобразования из столбцов в строки с помощью INDEX() функции. Я предложил бы использовать что-то вдоль линий следующего в первых ячейках назначения (для которых вы хотите «Question1» с «question2» ниже его размещения):

Question1 Destination Cell: 
=INDEX($A:$A,COLUMN(A1)) 

Answer1 Destination Cell: 
=INDEX($B:$B,COLUMN(A1)) 

Оттуда просто скопировать уравнения для справа, пока вы не запустили столько столбцов, сколько у вас есть строки, так как это позволяет вашему столбцу преобразовать строку в неограниченное число раз вправо.

** Это будет работать до тех пор, пока ваши вопросы & Ответы на данные находятся в столбцах ColumnA и ColumnB, как вы указали, но можете быть соответствующим образом изменены (используя альтернативный метод для COLUMN (A1), чтобы найти строку, которую вы перемещаете).

И, если вы хотите, чтобы ваши вопросы и ответы на стек после завершения набора из 5 колонок, как вы показываете выше, установите его так:

Question1 Destination Cell: 
=INDEX($A:$A,COLUMN(A1)) 

Answer1 Destination Cell: 
=INDEX($B:$B,COLUMN(A1)) 

Answer6 Destination Cell: 
=INDEX($B:$B,MATCH([non-locked cell address of Answer1],$B:$B,0)+5) 

Оттуда, скопировать эти три ячейки более, чтобы охватить 5 столбцов справа. И ТОГДА, чтобы расширяться вниз, скопируйте только строку вычислений, которая начинается с Answer6, и вставьте их вниз по листу, чтобы охватить столько строк, что у вас есть в столбцах ColumnA и ColumnB.

Этот метод будет производить этот результат:

Question1 Question2 Question3 Question4 Question5 
Answer1 Answer2 Answer3 Answer4 Answer5 
Answer6 Answer7 Answer8 Answer9 Answer10 

Приветствия.

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