Как скопировать диапазон последней строки данных и вставить в строку под ним

#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
  

Дайте мне знать, если это работает