Копировать до последнего куска данных - PullRequest
0 голосов
/ 16 марта 2011

Можно ли выбрать диапазон для копирования в последний элемент?

Sheets("Design").Select
Range("A1:C200").Copy

'My data only runs until E48 and Im left with 152 blancs.

Так что теперь он копирует из A1 в E200, но как я могу редактировать приведенный выше код, чтобы он выбирал только до последнегочасть данных, которая в моем случае является E48?(это переменная)

Спасибо!

@ Жан

В моем листе Excel у меня есть данные, начиная с A1-A18, B пусто и C1-C2.Теперь я хотел бы скопировать все ячейки, которые содержат значение.

 With Range("A1")
     Range(.Cells(1, 1), .End(xlDown).Cells(20, 3)).Copy
 End With

Это скопирует все из A1-C20, но я хочу, чтобы A1-A18 и C1-C2 выглядели так, как будто они содержат данные.Но это должно быть сформировано таким образом, чтобы, как только у меня были данные в Б или мой диапазон расширялся, чтобы они тоже копировались.

Возможно, это немного яснее?

О копировании /Ситуация вставки;

Я сейчас вставляю, используя эту

appWD.Selection.PasteSpecial ' So it copies the formats too?
'In your case, do you mean I should do it like this?
Range(.Cells(1, 1), .End(xlDown).Cells(20, 3)).Copy Destination:=appWD.Selection.PasteSpecial

Ответы [ 3 ]

2 голосов
/ 17 марта 2011

Это работает:

With Range("A1")
    Range(.Cells(1, 1), .End(xlDown).Cells(1, 5)).Copy
End With

Измените «5», если вам нужно другое количество столбцов.

Кроме того, это я усвоил трудным путем: Избегайте копирования / вставки , если это вообще возможно! Скопируйте и вставьте использовать буфер обмена. Другие программы могут выполнять чтение / запись в буфер обмена во время работы вашего кода, что приведет к непредсказуемым непредсказуемым результатам. Тем не менее, можно безопасно скопировать в целевой диапазон на той же строке, то есть сделать это

Range(.Cells(1, 1), .End(xlDown).Cells(1, 5)).Copy myDestinationRange

а не это

Range(.Cells(1, 1), .End(xlDown).Cells(1, 5)).Copy
myDestinationRange.Paste

Последний использует буфер обмена, а первый - нет.

2 голосов
/ 16 марта 2011

Это должно работать:

a1 = Range("a1").Address
lastcell = Range("E1").End(xlDown).Address
Range(a1, lastcell).Copy
0 голосов
/ 17 марта 2011

Если вас это устраивает, мой фаворит - CurrentRegion:

Range("A1").CurrentRegion.Copy Destination:=Sheet2.Range("a1")
...