Как скопировать и вставить все кроме строки 1 из другого рабочего листа - PullRequest
2 голосов
/ 21 января 2020

Я хочу выбрать все строки на рабочем листе «Данные», кроме первой, а затем скопировать и вставить эти выбранные строки в следующую доступную строку моего листа «Исторические данные». Я могу копировать и вставлять данные в исторические данные, используя код 1. И я могу выбрать все, кроме первой строки в активном рабочем листе, используя код 2. Но как я могу их объединить?

Код 1:

Copying and pasting 
Sheets("Data").Range("A2:H2").Copy
With Sheets("Historical Data").Range("A" & Rows.Count).End(xlUp).Offset(1)
    .PasteSpecial Paste:=xlPasteColumnWidths
    .PasteSpecial Paste:=xlPasteValues
End With

Код 2:

Selecting all but first Row
Dim xColIndex As Integer
Dim xRowIndex As Integer
xIndex = Application.ActiveCell.Column
xRowIndex = Application.ActiveSheet.Cells(Rows.Count, xIndex).End(xlUp).Row
Range(Cells(2, xIndex), Cells(xRowIndex, xIndex)).Select

Ответы [ 2 ]

1 голос
/ 21 января 2020

Я заметил, что в ответе не указано, как копировать другие форматы, или не указан диапазон, если старые данные уже есть. Поэтому я добавляю свой ответ на ваш вопрос. Активировать в конце кода откроет лист «Исторические данные» для вас.

Option Explicit
Sub Macro1()
Dim ShD As Worksheet
Dim ShHD As Worksheet
Dim xIndex As Long
Dim LastRow As Long
Dim i As Long
    Set ShD = ThisWorkbook.Sheets("Data")
    Set ShHD = ThisWorkbook.Sheets("HD")
    'Change column width
    For i = 1 To 8
        ShHD.Columns(i).ColumnWidth = ShD.Columns(i).ColumnWidth
    Next
    xIndex = ShD.Range("A2").Column
    LastRow = CountRow(ShD.Name, xIndex)
    'Clears formats and values
    ShHD.Range("A2:H" & LastRow).Clear
    'Copying and pasting
    ShHD.Range("A2:H" & LastRow).Value = ShD.Range("A2:H" & LastRow).Value
    ShD.Range("A2:H" & LastRow).Copy
    ShHD.Range("A2:H" & LastRow).PasteSpecial xlFormats
    'Activate sheet
    ShHD.Activate
End Sub

'Function to count rows in column
Function CountRow(SheetName As String, Col As Long) As Long
    CountRow = ThisWorkbook.Sheets(SheetName).Cells(Rows.Count, Col).End(xlUp).Row
End Function
1 голос
/ 21 января 2020

да H всегда будет моим последним столбцом. Данные и исторические данные - это разные листы в одной и той же книге - pete800 6 минут a go

Как я уже упоминал в комментарии, найдите последнюю строку и затем создайте свой диапазон для копирования.

Это то, что вы пытаетесь? Вставьте этот код в модуль рабочей книги с обоими листами.

Option Explicit

Sub Sample()
    Dim wsThis As Worksheet, wsThat As Worksheet
    Dim lRow As Long
    Dim rng As Range

    Set wsThis = Sheets("Data")
    Set wsThat = Sheets("Historical Data")

    '~~> Find last row in Data Sheet
    lRow = wsThis.Range("A" & wsThis.Rows.Count).End(xlUp).Row

    '~~> Construct your range
    Set rng = wsThis.Range("A2:H" & lRow)

    '~~> Copy the range
    rng.Copy

    '~~> Paste the range
    With wsThat.Range("A" & wsThat.Rows.Count).End(xlUp).Offset(1)
        .PasteSpecial Paste:=xlPasteColumnWidths
        .PasteSpecial Paste:=xlPasteValues
    End With
End Sub

Интересные чтения

  1. Как и пытался предложить @BigBen, избегайте использование .Select. Возможно, вы захотите увидеть Как избежать использования Select в Excel VBA
  2. Найти последнюю строку
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...