#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 (я знаю, много столбцов в моем проекте) в «Таблицу циклов», заданную как «Цикл». Приятно настроить листы так, чтобы им не приходилось спускаться и переименовывать весь ваш код позже, поскольку это, как правило, динамическое значение.