У меня есть столбец, который мне нужно скопировать в конец одного и того же столбца дважды. Мой код:

Range("AQ2:AQ" & LastRow).Copy Range("AQ" & LastRow + 1)

Тем не менее, я не могу просто написать эту строку дважды, потому что это увеличит число строк в четыре раза, а не утроит их. Например, если столбец AQ состоял из 4 строк, при его копировании и вставке один раз получается 8 строк, но при повторении этой строки эти 8 копируются и вставляются, что дает 16 строк. Однако я хочу только 12 строк (4 строки копируются один раз и вставляются дважды).

Спасибо

2
isaaacs 16 Авг 2019 в 15:13

2 ответа

Лучший ответ

Все, что вам нужно сделать, это вставить дважды. Но важно отметить, что вам нужно будет обновить LastRow перед вставкой во второй раз.

Также стоит упомянуть, что при кодировании VBA очень рекомендуется использовать объект листа. Это явно определит ваши рабочие листы для ваших программ и может сэкономить вам много хлопот в будущем. Принять привычку :)

Смотрите ниже код (не проверено):

Sub CopyPaste()

    Dim LastRow As Long
    Dim ws As Worksheet

    Set ws = Sheets("Sheet1")

    'find lastrow
    LastRow = ws.Range("AQ" & ws.Rows.Count).End(xlUp).Row

    'copy
    ws.Range("AQ2:AQ" & LastRow).Copy
    ws.Range("AQ" & (LastRow + 1)).Paste

    'update last row
    LastRow = ws.Range("AQ" & ws.Rows.Count).End(xlUp).Row

    'paste again
    ws.Range("AQ" & (LastRow + 1)).Paste

    'clear clipboard
    Application.CutCopyMode = False

    'clear ws object
    Set ws = Nothing

End Sub
3
Dean 16 Авг 2019 в 12:19
Sub copycopy()

Dim sh As Worksheet
Dim i As Integer
Dim lRow As Long
Dim rng As Range

Set sh = Sheets("Sheet1")
'determine range to be copied
Set rng = sh.Range(sh.Range("AQ2"), sh.Range("AQ2").End(xlDown))
'find last row
lRow = sh.Cells(Rows.Count, "AQ").End(xlUp).Row + 1
'copy range twice
For i = 1 To 2
    rng.Copy Destination:=sh.Range("AQ" & lRow)
    lRow = sh.Cells(Rows.Count, "AQ").End(xlUp).Row + 1
Next i

End Sub
1
Bezmir 14 Ноя 2019 в 07:34