#excel #vba
#excel #vba
Вопрос:
Я пытаюсь создать макрос, чтобы получить последнюю строку данных на моем листе и скопировать / вставить ее в строку перед ней. Мне нужно, чтобы он собирал данные в столбцах B-N. Я могу сделать это только для столбца B, используя приведенный ниже код, но я не могу понять синтаксис, чтобы заставить его сделать это для столбца B-N — может кто-нибудь помочь?
Sub copylastrow()
Worksheets("Sheet1").Activate
Range("B" amp; Rows.Count).End(xlUp).Copy
Range("B" amp; Rows.Count).End(xlUp).Offset(1).PasteSpecial
End Sub
Комментарии:
1. В каком столбце вы хотите найти последнюю строку с данными, B или N? и вставляете ли вы специальные значения?
2. Спасибо — я объявил рабочий лист b / c есть еще около 40 листов, для которых мне понадобится идентичный процесс — и я собираюсь скопировать последнюю строку данных (в моем случае строку 46) в строку 47 с формулами — вот почему я их не перенес — какие-либо рекомендации?
3. Вы знаете названия всех листов? все ли листы в одной книге? это всегда строка 46?
4. Я знаю все имена, это всегда будет последняя строка в наборе данных, копируемом в следующую строку (так что в этом месяце 46-> 47, в следующем месяце будет 47-> 48 и т. Д.), И да, все они находятся в одной книге. Но я на самом деле скорректировал код, который вы мне дали, для переноса формул и уже решил все, что мне было нужно — я очень ценю помощь!
5. Потрясающе. Если код помог, подумайте о том, чтобы отметить ответ, чтобы другие могли его найти.
Ответ №1:
Некоторые комментарии в коде:
- Определите исходный лист (его не нужно активировать)
- Найдите последнюю строку в определенном столбце
- Установите исходный диапазон в соответствии со столбцами и последней строкой
- Передача значений без их копирования происходит быстрее
Предположения:
- Столбец B — это ссылка для получения последней строки
- Вы просто вставляете значения
Прочитайте комментарии и настройте код в соответствии с вашими потребностями.
Код
Public Sub CopyLastRow()
' Define the source sheet (no need to activate it)
Dim sourceSheet As Worksheet
Set sourceSheet = ThisWorkbook.Worksheets("Sheet1")
' Find the last row in an specific column
Dim lastRow As Long
lastRow = sourceSheet.Range("B" amp; sourceSheet.Rows.Count).End(xlUp).Row
' Set the source range according to columns and last row
Dim sourceRange As Range
Set sourceRange = sourceSheet.Range("B" amp; lastRow amp; ":N" amp; lastRow)
' Transfer values without copying them is faster
sourceRange.Offset(1).Value = sourceRange.Value
End Sub
Дайте мне знать, если это работает