2015-10-21 2 views
2

У меня есть таблица выглядит следующим образом:«транспонирование» таблица с несколькими столбцами

+---+---+---+---+---+---+ 
| | a | b | c | d | e | 
+---+---+---+---+---+---+ 
| f | 1 | 3 | 3 | 2 | 2 | 
| g | 3 | 1 | 3 | 2 | 1 | 
| h | 3 | 3 | 1 | 3 | 3 | 
| i | 2 | 2 | 3 | 1 | 2 | 
| j | 2 | 1 | 3 | 2 | 1 | 
+---+---+---+---+---+---+ 

И я хочу, чтобы это было так:

+---+---+---+ 
| a | f | 1 | 
| a | g | 3 | 
| a | h | 3 | 
| a | i | 2 | 
| a | j | 2 | 
| b | f | 3 | 
| b | g | 1 | 
| b | h | 3 | 
| b | i | 2 | 
| b | j | 1 | 
| c | f | 3 | 
| c | g | 3 | 
| c | h | 1 | 
| c | i | 3 | 
| c | j | 3 | 
| d | f | 2 | 
| d | g | 2 | 
| d | h | 3 | 
| d | i | 1 | 
| d | j | 2 | 
| e | f | 2 | 
| e | g | 1 | 
| e | h | 3 | 
| e | i | 2 | 
| e | j | 1 | 
+---+---+---+ 

Я использую этот макрос:

Sub ColumnCopy() 

Sheets("test").Cells.Clear 

Dim tRow As Long 
Dim source As String 
Dim target As String 

    source = "test1"  'Set your source sheet here 
    target = "test"  'Set the Target sheet name 

    'tRow = 2    'Define the start row of the target sheet 

    'Get Last Row and Column 
    lastRow = Sheets(source).Range("A" & Rows.Count).End(xlUp).Row 
    lastCol = Sheets(source).Cells(1, Columns.Count).End(xlToLeft).Column 

    tRow = 2 
    colBase = 2 
    Do While colBase < lastCol 
     For iRow = 2 To lastRow 

      Sheets(target).Cells(tRow, 1) = Sheets(source).Cells(1, colBase) 
      Sheets(target).Cells(tRow, 2) = Sheets(source).Cells(iRow, 1) 
      Sheets(target).Cells(tRow, 3) = Sheets(source).Cells(iRow, colBase) 

      tRow = tRow + 1 
     Next iRow 
     colBase = colBase + 1 
    Loop 
End Sub 

Но я получаю результат недостающего колонка "е":

+---+---+---+ 
| a | f | 1 | 
| a | g | 3 | 
| a | h | 3 | 
| a | i | 2 | 
| a | j | 2 | 
| b | f | 3 | 
| b | g | 1 | 
| b | h | 3 | 
| b | i | 2 | 
| b | j | 1 | 
| c | f | 3 | 
| c | g | 3 | 
| c | h | 1 | 
| c | i | 3 | 
| c | j | 3 | 
| d | f | 2 | 
| d | g | 2 | 
| d | h | 3 | 
| d | i | 1 | 
| d | j | 2 | 
+---+---+---+ 

Я не могу найти причину этой проблемы. Я действительно новичок в преодолении макроса. Спасибо за помощь!

+0

Легко без VBA, но будет более утомительным, если требуется часто. – pnuts

ответ

2

изменить это: Do While colBase < lastCol к этому:

Do While colBase <= lastCol 
+0

Спасибо, Скотт! –

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