2016-05-10 4 views
0

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

with copySheet.Range("A2:A400") 
pasteSheet.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).resize(.rows.count, .columns.count) = .value 
end with 

Здесь я не копировать значение столбца A до 400-й строки, я хотел бы, чтобы быть переменными, поэтому я хотел бы, чтобы скопировать до конечного значения в этом столбце и вставить его в колонку В.

Кроме того, если я хотел бы скопировать столбец B и вставить его в столбец C, с тем же кодом, который я написал выше, обменивается со значениями B и C следующим образом;

with copySheet.Range("B2:B400") 
pasteSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).resize(.rows.count, .columns.count) = .value 
end with 

Этот код после того, как используется первый выше, не вставляет столбцами А. Кто-нибудь знает, как решить эту проблему?

ответ

0

Создайте переменную, чтобы захватить последнюю строку данных в нужном столбце копирования, а затем используйте это в своем операторе With.

Sub test() 

Dim copySheet As Worksheet 
Dim pasteSheet As Worksheet 
Dim lRow As Long 

Set copySheet = Sheets("copySheet") 
Set pasteSheet = Sheets("pasteSheet") 

'Determine last row of Column A in copySheet 
lRow = copySheet.Cells(copySheet.Rows.Count, 1).End(xlUp).Row 

With copySheet.Range("A2:A" & lRow) 
pasteSheet.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).Resize(.Rows.Count, .Columns.Count) = .Value 
End With 

'Determine last row of Column B in copySheet 
lRow = copySheet.Cells(copySheet.Rows.Count, 2).End(xlUp).Row 

With copySheet.Range("B2:B" & lRow) 
pasteSheet.Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).Resize(.Rows.Count, .Columns.Count) = .Value 
End With 

End Sub 

Вы могли бы сделать шаг вперед и назначить Long переменные для учета, сколько колонка вам нужно скопировать и добавить For петли, чтобы пройти через каждый из них.

Из любопытства, почему бы вам не скопировать весь лист, а затем вставить новую колонку перед колонкой A на pasteSheet?

0

Возможно, вы можете попробовать это? это немного грубая сила .... для второго вопроса вы можете изменить B и C

Columns("A").Select 
Selection.copy 
Range("B1").Select 
ActiveSheet.Paste 
Range("A1").Select 
Application.CutCopyMode = False 
Смежные вопросы