2015-03-27 3 views
0

У меня есть только один лист, который имеет 6 столбцов и 10 строк. Таким образом, диапазон моей таблицы A1: F10, который имеет 60 ячеек.Вырезание/вставка данных из столбца B в первую пустую ячейку в столбце A

Мне просто нужно вырезать данные из столбца B и вставить его в первую пустую ячейку в столбце A. Затем мне нужно сделать то же самое со столбцами C - F. В конце концов я хочу иметь только один столбец (Столбец А), который составляет 60 строк.

Sub Move_Columns() 
    Range("B1:B10").Copy Destination:=Range("A11") 
    Range("C1:C10").Copy Desitnation:=Range("21") 
    ' this would continue until columns B-F were copied in column A 
End Sub 

Проблема в том, что этот код копирует только данные. Мне нужно удалить его после его копирования. Я также уверен, что есть гораздо более эффективный способ написания кода, так что мне не нужно повторять диапазоны.

Я хотел бы знать, как писать код так, чтобы Excel автоматически вырезать и вставлять данные из каждого столбца в первой пустой строке в столбце A.

Будет ли для каждого оператора будет хорошей идеей, чтобы добавить там?

+0

Хороший вопрос для первого! – FreeMan

ответ

0

Я делаю этот код и помещаю комментарии, которые помогут вам понять.

Sub MoveAllInFirstColumn() 
    Dim i As Integer 
    Dim lastCol As Integer 
    lastCol = Cells(1, Columns.Count).End(xlToLeft).Column 'finds the last column 
    For i = 2 To lastCol ' foreach columns except first 
     Dim lastRow As Integer 
     lastRow = Cells(Rows.Count, "A").End(xlUp).Row 'get the lastrow of current column 
     Range(Cells(1, i), Cells(Cells(Rows.Count, i).End(xlUp).Row, i)).Cut Cells(lastRow + 1, 1) 'cut and paste the current column to the first column 
    Next i 
End Sub 
+0

О, боже мой !!!! Ты просто спас мне жизнь !!!!!!! Серьезно, я не знаю, как вас достаточно поблагодарить! Как я могу продвигать и принимать ответ? (Мне жаль, что я так невежественна, но это мой первый раз). На самом деле, я попытался щелкнуть стрелку вверх, и это не позволило мне, потому что у меня еще нет солидной репутации? Все еще не видя, где его принять. – Jessica240

+0

Спасибо! Я успешно принял ваш ответ. Хотя сейчас я пытаюсь использовать ваш код в листе Excel большего размера. Когда я запускаю его в первый раз, примерно половина моих столбцов вырезается и копируется в столбец А. Затем я удаляю эти столбцы и пытаюсь запустить его снова, чтобы остальные копии копировать, но ничего не делает. Любые идеи о том, как исправить? – Jessica240

+0

Я попытался открыть новую рабочую книгу и скопировать/вставить свои данные в новую книгу, но она все еще не работает. Я не уверен, почему ....... – Jessica240

-1

Чтобы продолжить то, что у вас есть:

Sub Move_Columns() 
    Range("B1:B10").Copy Destination:=Range("A11") 
    Range("B1:B10").ClearContents 
    Range("C1:C10").Copy Desitnation:=Range("A21") 
    Range("C1:C10").ClearContents 
    ' this would continue until columns B-F were copied in column A 
End Sub 

Альтернатива с некоторыми зацикливание

Sub Move_Columns() 
Dim StartCol as Integer 
Dim EndCol as Integer 
Dim StartRow as Integer 
Dim EndRow as Integer 
Dim CurRow as Integer 
Dim i as Integer 
Dim DestCol as integer 

DestCol = 1 
StartCol = 2 
EndCol = 6 
StartRow = 1 
EndRow = 10 

CurRow = StartRow 
for I = StartCol to EndCol 
    'Range(cells(i, StartRow),cells(i, EndRow).Copy Destination:=Range(DestCol,CurRow) 
    'Range(cells(i, StartRow),cells(i, EndRow).ClearContents 
    Range(cells(StartRow, i), cells(EndRow, 1)).Copy Destination:=Range(DestCol, CurRow) 
    Range(cells(StartRow, i),cells(EndRow,i)).ClearContents 
    CurRow = CurRow + EndRow 
Next 
end Sub 
+0

ОК, проголосовать. Это круто. Вы получили комментарий о том, что с ним не так? – FreeMan

+0

Freeman, когда я скопировал ваш код в Excel, 2 строки снизу «Range (ячейки (i, StartRow), ячейки (i, EndRow) .Copy Destination: = Range (DestCol, CurRow) Диапазон (ячейки (i , StartRow), ячейки (i, EndRow) .ClearContents "стали выделены красным цветом. Я не уверен, почему? – Jessica240

+0

Два вопроса: во-первых, я отсутствовал") ", два, у меня были параметры row/col в неправильный порядок в вызовах 'cells()'. Я закомментировал 2 плохих строки и заменил их, чтобы вы могли видеть разницу. – FreeMan

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