Excel: как скопировать отдельные столбцы разной длины на новую вкладку?

#excel #vba

#excel #vba

Вопрос:

Я еще один новичок в написании макросов… Вот что я пытаюсь сделать:

Скопируйте определенные столбцы с одного листа на другой лист, и длина или строки могут отличаться. Кажется простым, верно? Тем не менее, я не могу этого понять.

 Dim RowS01Max As Integer
Dim Sheet1Data() As Variant

With Sheets("sheet1")
  RowS01Max = .Cells(Rows.Count, "A").End(xlUp)
  Sheet1Data = .Range(.Cells(2, 1), .Cells(RowS01Max, 1)).Value
End With

With Sheets("Sheet2")
  .Range(.Cells(2, 5), .Cells(RowS01Max, 5)).Value = Sheet1Data
End With
  

Итак, это работает, если я хочу скопировать только один столбец («A»), как мне расширить диапазон, я уверен, что это легко исправить?

Приветствуются любые подсказки.

Приветствия

Сандра

Ответ №1:

Полезным свойством листа Excel является UsedRange : это возвращает объект диапазона VBA, представляющий область указанного листа, на котором есть данные. Также полезно знать кодовое имя VBA листа, которое довольно четко объясняется в этой статье.
Имея это в виду, мы можем вычислить диапазон, представляющий используемые ячейки в данном столбце (или столбцах), используя Intersect функцию, а затем скопировать его в выбранное нами место назначения.

 Dim rng As Range
Set rng = Intersect(Sheet1.Usedrange, Sheet1.Range("A:A"))

rng.Copy Destination:=Sheet2.Range("B5")
  

Надеюсь, это поможет!

Ответ №2:

Это фрагмент моего кода, использующий некоторые переменные. Обычно я подсчитываю, сколько строк у меня есть, чтобы скопировать только до этого размера строки.

У меня есть что-то вроде этого:

 Set Compiled = Sheets("Compiled Sheet")
Set Cycle = Sheets("Cycle Sheet")

countNum = Application.CountA(Range("A:A")) ' Counts how many rows you have

CompileHeader = Compiled.Range("CD1").Value  ' Copies header title.

Compiled.Range("CD2:CD" amp; countNum).Value = Cycle.Range(ColumnLetter amp; "2:" amp; ColumnLetter amp; countNum).Value
  

Итак, в приведенном выше коде я копирую столбец CD (я знаю, много столбцов в моем проекте) в «Таблицу циклов», заданную как «Цикл». Приятно настроить листы так, чтобы им не приходилось спускаться и переименовывать весь ваш код позже, поскольку это, как правило, динамическое значение.