Как в excel копировать строку vba

In this Article

  • Rows & Columns – Paste vs. Insert
    • Copy & Paste Over Existing Row / Column
    • Copy & Insert Row / Column
  • Copy Entire Row
    • Cut and Paste Rows
    • Copy Multiple Rows
  • Copy Entire Column
    • Cut and Paste Columns
    • Copy Multiple Columns
  • Copy Rows or Columns to Another Sheet
    • Cut Rows or Columns to Another Sheet

This tutorial will teach you how to copy (or cut) entire Rows or Columns using VBA. We cover copying and pasting ranges of cells in another article.

First we will show you how to paste or insert copied rows/columns and discuss the differences.  Then we will show you all of the different ways to references rows and columns when copying or cutting.

Rows & Columns – Paste vs. Insert

When pasting rows and columns you have two options:  You can paste over the existing row (or column) or you can insert a new row (or column).

Let’s look at the difference…

vba copy and paste row

Copy & Paste Over Existing Row / Column

This will copy row 1 and paste it into the existing row 5:

Range("1:1").Copy Range("5:5")

This will copy column C and paste it into column E:

Range("C:C").Copy Range("E:E")

Copy & Insert Row / Column

Instead you can insert the copied row or column and shift the existing rows or columns to make room.

This will copy row 1 and insert it into row 5, shifting the existing rows down:

Range("1:1").Copy
Range("5:5").Insert

This will copy column C and insert it into column E, shifting the existing columns to the right:

Range("C:C").Copy
Range("E:E").Insert

Copy Entire Row

Below we will show you several ways to copy row 1 and paste into row 5.

Range("1:1").Copy Range("5:5")
Range("A1").EntireRow.Copy Range("A5")
Rows(1).Copy Rows(5)

Cut and Paste Rows

Simply use Cut instead of Copy to cut and paste rows:

Rows(1).Cut Rows(5)

Copy Multiple Rows

Here are examples of copying multiple rows at once:

Range("5:7").Copy Range("10:13")
Range("A5:A7").EntireRow.Copy Range("A10:A13")
Rows("5:7").Copy Rows("10:13")

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

automacro

Learn More

Copy Entire Column

You can copy entire columns similarily to copying entire rows:

Range("C:C").Copy Range("E:E")
Range("C1").EntireColumn.Copy Range("C1").EntireColumn
Columns(3).Copy Range(5)

Cut and Paste Columns

Simply use Cut instead of Copy to cut and paste columns:

Range("C:C").Cut Range("E:E")

Copy Multiple Columns

Here are examples of copying multiple columns at once:

Range("C:E").Copy Range("G:I")
Range("C1:E1").EntireColumn.Copy Range("G1:I1")
Columns("3:5").Copy Columns("7:9")

VBA Programming | Code Generator does work for you!

Copy Rows or Columns to Another Sheet

To copy to another sheet, simply use the Sheet Object:

Sheets("sheet1").Range("C:E").Copy Sheets("sheet2").Range("G:I")

Cut Rows or Columns to Another Sheet

You can use the exact same technique to cut and paste rows or columns to another sheet.

Sheets("sheet1").Range("C:E").Cut Sheets("sheet2").Range("G:I")

Вырезание, перемещение, копирование и вставка ячеек (диапазонов) в VBA Excel. Методы Cut, Copy и PasteSpecial объекта Range, метод Paste объекта Worksheet.

Метод Range.Cut

Range.Cut – это метод, который вырезает объект Range (диапазон ячеек) в буфер обмена или перемещает его в указанное место на рабочем листе.

Синтаксис

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен (перемещен) вырезанный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект вырезается в буфер обмена.

Для вставки на рабочий лист диапазона ячеек, вырезанного в буфер обмена методом Range.Cut, следует использовать метод Worksheet.Paste.

Метод Range.Copy

Range.Copy – это метод, который копирует объект Range (диапазон ячеек) в буфер обмена или в указанное место на рабочем листе.

Синтаксис

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен скопированный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект копируется в буфер обмена.

Метод Worksheet.Paste

Worksheet.Paste – это метод, который вставляет содержимое буфера обмена на рабочий лист.

Синтаксис

Worksheet.Paste (Destination, Link)

Метод Worksheet.Paste работает как с диапазонами ячеек, вырезанными в буфер обмена методом Range.Cut, так и скопированными в буфер обмена методом Range.Copy.

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон (ячейка), указывающий место вставки содержимого буфера обмена. Если этот параметр не указан, используется текущий выделенный объект.
Link Необязательный параметр. Булево значение, которое указывает, устанавливать ли ссылку на источник вставленных данных: True – устанавливать, False – не устанавливать (значение по умолчанию).

В выражении с методом Worksheet.Paste можно указать только один из параметров: или Destination, или Link.

Для вставки из буфера обмена отдельных компонентов скопированных ячеек (значения, форматы, примечания и т.д.), а также для проведения транспонирования и вычислений, используйте метод Range.PasteSpecial (специальная вставка).

Примеры

Вырезание и вставка диапазона одной строкой (перемещение):

Range(«A1:C3»).Cut Range(«E1»)

Вырезание ячеек в буфер обмена и вставка методом ActiveSheet.Paste:

Range(«A1:C3»).Cut

ActiveSheet.Paste Range(«E1»)

Копирование и вставка диапазона одной строкой:

Range(«A18:C20»).Copy Range(«E18»)

Копирование ячеек в буфер обмена и вставка методом ActiveSheet.Paste:

Range(«A18:C20»).Copy

ActiveSheet.Paste Range(«E18»)

Копирование одной ячейки и вставка ее данных во все ячейки заданного диапазона:

Range(«A1»).Copy Range(«B1:D10»)


Despite many posts I have looked through being of along the same lines as my question, none of the answers satisfy what I am looking for. If you can link me to one I’d gladly read it.

I have a workbook with worksheets. For simplicity, let’s say my workbook has a worksheet. And in my worksheet which is called «Sheet1», there is data in cells A1 to A4.

What I want my VBA code to do is:

  1. Copy row 1 (or specifically cells A1 to A4) of Workbook ‘A’ into Range variable ‘myRange’
  2. Create a new workbook, let’s call this one Workbook ‘B’
  3. Give Workbook ‘B’s default «sheet1» a new name to «Test Name»
  4. Open Workbook ‘B’ (though I realise that VBA code «Workbooks.Add» opens a new book so this step may be redundant since Workbooks.Add covers half of point 2 and 3)
  5. Paste ‘myRange’ into first row of ‘Workbook B’
  6. Save ‘Workbook B’ with name «Test Book» and a timestamp enclosed in square brackets. The file must also be of the file extension «xls»
  7. Close ‘Workbook B’ and return to ‘Workbook A’

What I have so far is this:

Sub OpenAndSaveNewBook()
    'Declarations
    Dim MyBook As String
    Dim MyRange As Range
    Dim newBook As Workbook

    'Get name of current wb
    MyBook = ThisWorkbook.Name
    Set MyRange = MyBook.Sheets("Sheet1").Range("A1,F1")

    'Create/Open new wb
    newBook = Workbooks.Add

    'Save new wb with XLS extension
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "/" & "TEST-BOOK", _
                            FileFormat:=xlNormal, CreateBackup:=False

    '===NOTE: BEFORE THE FOLLOWING RUNS I NEED TO PERFORM ACTIONS ON CELLS VIA VBA ON
    '===WORKBOOK 'A'. DOES THE NEWLY CREATE WORKBOOK BECOME THE PRIMARY/ACTIVE WORKBOOK
    '===? AND SO THEN DO I NEED TO ACTIVATE WORKBOOK 'A'? 
    ActiveWorkbook.Close savechanges:=True

    'Return focus to workbook 'a'
    MyBook.Activate
End Sub

As you can see, I am lacking the code that will handle:

  • the pasting of my copied data to the new workbook
  • the changing of the new workbook’s sheet1 name to something else
  • adding a timestamp to the filename string on save

Lastly, I have included a question in my code as I think I may have a misunderstanding of the ActiveWorkbook method. AFAIK when the code «Workbooks.Add» runs this becomes the Active Workbook, i.e. one with the focus. Does this effect how the VBA code running on Workbook ‘A’? Does this mean that if I wanted to add code to manipulate cells of Workbook ‘A’ then I would need to use «MyBook.Activate» where ‘MyBook’ holds the string of Workbook ‘A’s actual title?

Any help will be greatly appreciated.

Thanks,
QF

 

paha83

Пользователь

Сообщений: 12
Регистрация: 01.01.1970

Доброго времени суток уважаемые форумчане!
Имею задачу которую не могу решить сам, из-за отсутствия знаний и навыков.
Исходные данные:
1. Несколько одинаковых по структуре листов (см. пример) 1, 2, 3;
2. Лист «Финиш».

Задача. С помощью VBA:
1. Скопировать строки из активнного листа либо1, либо 2… и вставить их на лист «Финиш».
Условия:
1. Копировать строки только при условии заполненной ячейки в столбце  «В»;
2. Скопированные строки должбыть вставлены как значения;
3. При копировании новых данных на лист «Финиш» они должны вставляться ниже старых;
4. Если в листе «Финиш» есть заполненные строки с копируемой датой, то старые затираются, а на их место становятся новые;
5. Перезаписать данные можно только в течении 1-го дня после указанной даты в листах 1, 2 …, либо при вводе пароля (скажем 143).

Спасибо!

Прикрепленные файлы

  • Копия.xlsx (48.88 КБ)

 

CAHO

Пользователь

Сообщений: 2183
Регистрация: 25.02.2013

Пункт 3 и 4 противоречат друг другу. Или я не так понял.

Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.

 

paha83

Пользователь

Сообщений: 12
Регистрация: 01.01.1970

Приветствую, САНО!
Спасибо за внимание.
Может быть я не так описал, попробую разъяснить.
Противоречия невижу, т.к. п. 4 нежен для того чтобы данные с одной даты не задваивались в отчете, если в течении следующего дня после копируемой даты выявится ошибка то необходима возможность внести корректировку и перезаписать данные.
А в случае если пере записывание происходит позже чем 1 день после копируемой даты (п. 5) — это для защиты данных от потери (скажем вредительство).

 

kakaccc

Пользователь

Сообщений: 5
Регистрация: 22.09.2015

#4

22.09.2015 15:38:18

paha83

, если еще актуально:

Код
Sub Copy_rows_if()
Dim currentRow As Integer
Dim sourceCol As Integer
Dim LastRow As Integer
Dim currentRowValue
Dim sourcews As String

sourcews = ActiveSheet.Name 'базовый лист
sourceCol = 2   'колонка B ключевая
RowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row

For currentRow = 1 To RowCount  'для всех строк базового листа
    currentRowValue = Cells(currentRow, sourceCol).Value
    If Not (IsEmpty(currentRowValue) Or currentRowValue = "") Then
          Rows(currentRow).Copy
          Worksheets("Финиш").Select
          LastRow = Cells(Rows.Count, sourceCol).End(xlUp).Row
          Range(Cells(LastRow + 1, 1), Cells(LastRow + 1, 1)).PasteSpecial Paste:=xlPasteValues
          Worksheets(sourcews).Activate
    End If
Next
End Sub

Здесь первые 3 пункта.

Прикрепленные файлы

  • Копия — копия.xlsm (54.39 КБ)

Изменено: kakaccc22.09.2015 18:11:32

 

kakaccc

Пользователь

Сообщений: 5
Регистрация: 22.09.2015

#5

23.09.2015 15:35:13

Для 5 пункта:

Код
Sub zashita_dannyh()
Dim currentRow As Integer
Dim sourceCol As Integer
Dim data As String

sourceCol = 2
RowCount = Cells(1, sourceCol).End(xlDown).Row
RowCount_2 = ActiveSheet.Cells(RowCount, sourceCol).End(xlDown).Row
data = Range(Cells(RowCount, sourceCol), Cells(RowCount, sourceCol)).Value

'проверка на ошибку
For currentRow = RowCount To RowCount_2 - 2
    currentRowValue = Cells(currentRow, sourceCol).Value
    If Not (IsEmpty(currentRowValue) Or currentRowValue = "") And _
    Cells(currentRow + 1, sourceCol).Value <> currentRowValue Then
        MsgBox ("даты на лите не совпадают")
        Exit Sub
    End If
Next

'протектим лист
If Date - DateValue(data) > 1 Then
ActiveSheet.Protect Password:="143" 'пароль 143
End If
End Sub

Хотя, по-моему, без макроса будет даже проще. Пока он настроен так, что его надо запустить на каждом листе, который будет затем защищен.

Прикрепленные файлы

  • Копия — копия.xlsm (55.93 КБ)

 

paha83

Пользователь

Сообщений: 12
Регистрация: 01.01.1970

Доброго времени суток,

kakaccc!

Большое спасибо за ответ и помощь.
Для меня тема актуальна, т.к. схожие задачи приходится решать постоянно.

Еще раз спасибо!!!

 

rSkrin

Пользователь

Сообщений: 3
Регистрация: 26.02.2016

Добрый день!
Друзья, знатоки Excel, подскажите пожалуйста решение проблемы, аналогичной вышеизложенной с небольшим усложнением. Требуется скопировать все строки таблицы ежедневного отчета, кроме шапки (т.е. начиная с 5-й строки), из листа «отчет» в лист «архив», ниже ранее скопированных, при условии заполнения  всех ячеек в столбце 5 (Е), т.е . достигнута полнота отчета. Если хоть одна ячейка в столбце 5 не заполнена не производить копирование на лист  «архив». И подскажите пожалуйста, возможно ли отображение строк на листе «архив», с рамками как в таблице на листе «отчет» или автоматическое добавление границ таблицы.

 

kakaccc

Пользователь

Сообщений: 5
Регистрация: 22.09.2015

#8

27.02.2016 17:38:57

Код
Sub copy_to_archive()

Dim currentRow As Integer
Dim sourceCol As Integer
Dim LastRow As Integer
Dim currentRowValue
Dim sourcews As String
Dim Rowsnum As Integer

sourcews = ActiveSheet.Name 'базовый лист
sourceCol = 5   'Ключевая E колонка
Set myTable = Worksheets(sourcews).Range("A1").CurrentRegion
Rowsnum = myTable.Rows.Count

For currentRow = 5 To Rowsnum  'проверяем есть ли пустые в 5-ой колонке
    currentRowValue = Cells(currentRow, sourceCol).Value
    If (IsEmpty(currentRowValue) Or currentRowValue = "") Then
    MsgBox ("Внимание! Есть пустые ячейки.")
    Exit Sub
    End If
Next

For currentRow = 5 To Rowsnum  'Копируем
    Rows(currentRow).Copy
    Worksheets("Архив").Select
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    With Range(Cells(LastRow + 1, 1), Cells(LastRow + 1, 1))
    .PasteSpecial Paste:=xlPasteValues
    .PasteSpecial Paste:=xlPasteFormats
    End With
    Worksheets(sourcews).Activate
Next
End Sub

Немного громоздкий макрос получился.
Ограничение такое: таблица должны начинаться с ячейки А1.
rSkrin, если сойдет, то потом откалибруем под ваши нужды.

Изменено: kakaccc28.02.2016 02:18:56

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

#9

27.02.2016 18:36:24

kakaccc, чем по-Вашему будут отличаться результаты, если блок:

Код
For currentRow = 5 To Rowsnum 'Копируем
 Rows(currentRow).Copy
 Worksheets("Архив").Select
 LastRow = Cells(Rows.Count, 1).End(xlUp).Row
 With Range(Cells(LastRow + 1, 1), Cells(LastRow + 1, 1))
 .PasteSpecial Paste:=xlPasteValues
 .PasteSpecial Paste:=xlPasteFormats
 End With
 Worksheets(sourcews).Activate
Next

записать так:

Код
with Worksheets("Архив")
     LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
     myTable.offset(5).resize(myTable.Rows.Count-5).copy .Cells(LastRow + 1, 1)
end with

;)

Я сам — дурнее всякого примера! …

 

TheBestOfTheBest

Пользователь

Сообщений: 2366
Регистрация: 03.04.2015

Excel 2010 +PLEX +SaveToDB +PowerQuery

Файл должен находиться в папке c:1. На таблице ПКМ-Обновить.

Прикрепленные файлы

  • Копия.xlsx (57.41 КБ)

Неизлечимых болезней нет, есть неизлечимые люди.

 

kakaccc

Пользователь

Сообщений: 5
Регистрация: 22.09.2015

KuklP, потому что я нуб в vba  :D

Спасибо! Буду теперь знать и использовать эту функцию.
Но хотел бы сначала разобраться. Объясни, пожалуйста, последнее действие: …copy .Cells(LastRow + 1, 1)
Как это работает? Это типа destination? К чему относится точка перед Cells() Почему, вообще, происходит вставка копируемого?

 

rSkrin

Пользователь

Сообщений: 3
Регистрация: 26.02.2016

Спасибо друзья! Но есть вопрос. Уважаемый kakaccc, правильно ли я понял про «таблица должна начинаться с ячейки А1»- т.е.  начало всей таблицы, в том числе и шапки.  

 

rSkrin

Пользователь

Сообщений: 3
Регистрация: 26.02.2016

Вопрос отменяю. Чуть подправил, проверил работу, все отлично!!! Спасибо.

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

#14

28.02.2016 13:55:14

Цитата
kakaccc написал:
Это типа destination? К чему относится точка перед Cells()

Да, это destination.
выражением with Worksheets(«Архив») мы объявляем ссылку  на родительский объект Worksheets(«Архив»). дальше всему, что начинается с точки, вба будет пытаться присвоить родительский объект. Т.е. конструкцию

Код
with Worksheets("Архив")
 LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
 myTable.offset(5).resize(myTable.Rows.Count-5).copy .Cells(LastRow + 1, 1)
end with

можно записать буквально:

Код
 LastRow = Worksheets("Архив").Cells(Worksheets("Архив").Rows.Count, 1).End(xlUp).Row
 myTable.offset(5).resize(myTable.Rows.Count-5).copy Worksheets("Архив").Cells(LastRow + 1, 1)

в этом слуячае родительский объект вычисляется 3 раза вместо одного в предыдущем примере.
ВСЕ ЭТО и много другого интересного есть в справке по F1, причем составлено гораздо профессиональней и понятней чем в моем объяснении.

Я сам — дурнее всякого примера! …

 

kakaccc

Пользователь

Сообщений: 5
Регистрация: 22.09.2015

KuklP, все, раз это destination, то вопросов нет. Более менее разобрался. Буду теперь пользоваться. Красиво и лаконично получилось. Спасибо за объяснение!

rSkrin, да, вся таблица должна начинаться с А1 (шапка в вашемслучае). Можно сделать независимо от находжения таблицы, используя свойство CurrentRegion, например. Но тогда перед запуском макроса надо будет выделять какую-нибудь ячейку из таблицы. Первоначально я так и записал макрос. Не знал как для вас проще будет. Если хотите, можно так сделать.

 

0mega

Пользователь

Сообщений: 170
Регистрация: 24.12.2012

#16

06.11.2022 11:54:18

KuklP

, здравствуйте

Цитата
KuklP написал:
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row

почему команда начинается с точки
LastRow = .Cells(.Rows …
Ранее Вы предоставили  «общепринятую «

Цитата
написал:
LastRow = Cells(Rows.Count, 1).End(xlUp).Row

Какое у них отличие ?

 

MikeVol

Пользователь

Сообщений: 230
Регистрация: 20.10.2020

Ученик

#17

06.11.2022 12:29:09

0mega, Думаю если вы прочтёте справку то возможно поймёте что к чему.

почему команда начинается с точки

Содержание

  1. VBA Copy / Paste Rows & Columns
  2. Rows & Columns – Paste vs. Insert
  3. Copy & Paste Over Existing Row / Column
  4. Copy & Insert Row / Column
  5. Copy Entire Row
  6. Cut and Paste Rows
  7. Copy Multiple Rows
  8. VBA Coding Made Easy
  9. Copy Entire Column
  10. Cut and Paste Columns
  11. Copy Multiple Columns
  12. Copy Rows or Columns to Another Sheet
  13. Cut Rows or Columns to Another Sheet
  14. VBA Code Examples Add-in
  15. VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)
  16. Метод Range.Cut
  17. Синтаксис
  18. Параметры
  19. Метод Range.Copy
  20. Синтаксис
  21. Параметры
  22. Метод Worksheet.Paste
  23. Синтаксис
  24. Параметры
  25. Примеры
  26. 43 комментария для “VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)”
  27. VBA Excel. Буфер обмена (копирование, вставка, очистка)
  28. Копирование и вставка ячеек
  29. Буфер обмена и переменная
  30. Объект DataObject
  31. Копирование текста из переменной в буфер обмена
  32. Копирование текста из буфера обмена в переменную
  33. Очистка буфера обмена
  34. Функции для работы с буфером обмена
  35. 8 комментариев для “VBA Excel. Буфер обмена (копирование, вставка, очистка)”
  36. Метод Range.Copy (Excel)
  37. Синтаксис
  38. Параметры
  39. Возвращаемое значение
  40. Пример
  41. Поддержка и обратная связь
  42. Способы VBA работы с ячейками Excel
  43. Копировать и вставить: наиболее распространенное действие Excel
  44. Вставить данные ниже последней заполненной строки

VBA Copy / Paste Rows & Columns

In this Article

This tutorial will teach you how to copy (or cut) entire Rows or Columns using VBA. We cover copying and pasting ranges of cells in another article.

First we will show you how to paste or insert copied rows/columns and discuss the differences. Then we will show you all of the different ways to references rows and columns when copying or cutting.

Rows & Columns – Paste vs. Insert

When pasting rows and columns you have two options: You can paste over the existing row (or column) or you can insert a new row (or column).

Let’s look at the difference…

Copy & Paste Over Existing Row / Column

This will copy row 1 and paste it into the existing row 5:

This will copy column C and paste it into column E:

Copy & Insert Row / Column

Instead you can insert the copied row or column and shift the existing rows or columns to make room.

This will copy row 1 and insert it into row 5, shifting the existing rows down:

This will copy column C and insert it into column E, shifting the existing columns to the right:

Copy Entire Row

Below we will show you several ways to copy row 1 and paste into row 5.

Cut and Paste Rows

Simply use Cut instead of Copy to cut and paste rows:

Copy Multiple Rows

Here are examples of copying multiple rows at once:

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

Copy Entire Column

You can copy entire columns similarily to copying entire rows:

Cut and Paste Columns

Simply use Cut instead of Copy to cut and paste columns:

Copy Multiple Columns

Here are examples of copying multiple columns at once:

Copy Rows or Columns to Another Sheet

To copy to another sheet, simply use the Sheet Object:

Cut Rows or Columns to Another Sheet

You can use the exact same technique to cut and paste rows or columns to another sheet.

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

Источник

VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)

Вырезание, перемещение, копирование и вставка ячеек (диапазонов) в VBA Excel. Методы Cut, Copy и PasteSpecial объекта Range, метод Paste объекта Worksheet.

Метод Range.Cut

Синтаксис

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен (перемещен) вырезанный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект вырезается в буфер обмена.

Для вставки на рабочий лист диапазона ячеек, вырезанного в буфер обмена методом Range.Cut, следует использовать метод Worksheet.Paste.

Метод Range.Copy

Синтаксис

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен скопированный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект копируется в буфер обмена.

Метод Worksheet.Paste

Синтаксис

Метод Worksheet.Paste работает как с диапазонами ячеек, вырезанными в буфер обмена методом Range.Cut, так и скопированными в буфер обмена методом Range.Copy.

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон (ячейка), указывающий место вставки содержимого буфера обмена. Если этот параметр не указан, используется текущий выделенный объект.
Link Необязательный параметр. Булево значение, которое указывает, устанавливать ли ссылку на источник вставленных данных: True – устанавливать, False – не устанавливать (значение по умолчанию).

В выражении с методом Worksheet.Paste можно указать только один из параметров: или Destination, или Link.

Для вставки из буфера обмена отдельных компонентов скопированных ячеек (значения, форматы, примечания и т.д.), а также для проведения транспонирования и вычислений, используйте метод Range.PasteSpecial (специальная вставка).

Примеры

Вырезание и вставка диапазона одной строкой (перемещение):

Вырезание ячеек в буфер обмена и вставка методом ActiveSheet.Paste:

Копирование и вставка диапазона одной строкой:

Копирование ячеек в буфер обмена и вставка методом ActiveSheet.Paste:

Копирование одной ячейки и вставка ее данных во все ячейки заданного диапазона:

43 комментария для “VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)”

Странно, что не рассмотрено копирование ячеек, которые Cells.
Например, следующая строка копирует ячейку A1 в B2

а эта делает тоже самое, но демонстрирует,
как можно добавить размер и смещение:

Здравствуйте!
Скажите, как можно копировать на Лист 1, а вставить на Лист 2 диапазон ячеек целиком, либо отсортированный по 1 признаку диапазон(например по какому-то определенному значению, скажем, числу «500» в одном столбце Листа 1)?

Привет, Максим!
Вот пример сортировки таблицы по значению 500 в первом столбце на «Лист6» и копирования диапазона с «Лист6» на «Лист4» :

Спасибо большое, только я, наверно, неправильно описал ситуацию.
Сперва из эталонной таблицы Лист 1 копируем весь список на существующий Лист4.
Затем, пропускаем шапку, и, начиная со строки7, уже на Лист4 ищем строку, у которой в столбце 5 стоит число 500.
Вырезаем эту строку и вставляем на позицию строки 7. т.е первая после шапки.
Ищем следующую строку — вырезаем, потом вставляем на позицию строки 7+1=8 и т.д.
В итоге оставим только те строки, у которых в столбце 5 стоит число «500», остальные удаляются строки.

(пробовал менять местами строки в предыдущем коде, ошибок нет, копирует, переходит на лист 4, но строки на нем не удаляет, циклы пошагово проходят, но ничего не изменяется.)

Источник

VBA Excel. Буфер обмена (копирование, вставка, очистка)

Работа с буфером обмена в VBA Excel: копирование и вставка ячеек, копирование текста из переменной, очистка буфера обмена. Объект DataObject. Примеры.

Копирование и вставка ячеек

Копирование содержимого и форматов ячеек (диапазона) в буфер обмена осуществляется методом Range.Copy, а вставка – методом Worksheet.Paste:

При вставке диапазона ячеек из буфера обмена на рабочий лист достаточно указать верхнюю левую ячейку места (диапазона) вставки.

Для вставки из буфера обмена отдельных компонентов скопированных ячеек (значения, формулы, примечания и т.д.), а также применения к диапазону транспонирования или вычислений, используется метод Range.PasteSpecial (специальная вставка).

Буфер обмена и переменная

Передача текста между переменной и буфером обмена в VBA Excel осуществляется с помощью объекта DataObject. Стоит иметь в виду, что на некоторых компьютерах DataObject может некорректно работать при открытом окне проводника.

Объект DataObject

Подробнее об элементе DataObject вы можете прочитать на сайте разработчиков.

Методы объекта DataObject:

Метод Описание
GetFromClipboard Копирует данные из буфера обмена в DataObject
GetText Извлекает текстовую строку из объекта DataObject в указанном формате
PutInClipboard Перемещает данные из DataObject в буфер обмена
SetText Копирует текстовую строку в DataObject, используя указанный формат

Копирование текста из переменной в буфер обмена

Копирование текста из буфера обмена в переменную

Очистка буфера обмена

Специального метода для очистки буфера обмена в VBA Excel нет. Для решения этой задачи можно использовать выход из режима вырезания-копирования:

Следующий пример демонстрирует вставку скопированной ячейки «A1» в ячейки «A2» и «A3» и отсутствие вставки в ячейки «A4» и «A5» после строки Application.CutCopyMode = False :

Оператор On Error Resume Next необходим для обработки (пропуска) ошибки, возникающей при вставке из пустого буфера обмена.

Функции для работы с буфером обмена

В некоторых системах, начиная с Windows 8, метод DataObject.PutInClipboard не работает правильно: если открыт хотя бы один экземпляр Проводника (папка), в буфер обмена записываются два квадратика. Следующие функции должны решить эту проблему:

Пример использования функций для работы с буфером обмена:

8 комментариев для “VBA Excel. Буфер обмена (копирование, вставка, очистка)”

Код — не работает ▼

В А1 вставляется какой-то непечатаемый символ и всё. При переходе к другому приложению и попытке вставить содержимое буфера — фиаско.

Добрый день, Михаил!
Такое встречается, начиная с Windows 8, когда открыта хотя бы одна папка в Проводнике. Я добавил в статью функции для работы с буфером обмена, они должны работать.

В Win 8.1 такой проблемы не наблюдаю, уж по всякому погонял, пытаясь вызвать ошибку — всегда правильно отрабатывает ))
А за статью большое спасибо!

Нашёл такую информацию на случай получения ошибки относительно типа данных DataObject.
Чтобы заработал тип данных «DataObject» нужно подключить инструмент «Microsoft Forms Object Libraries». Для этого необходимо выполнить действия в редакторе макросов Эксель:
1. Открыть Tools/References;
2. Через кнопку Browse открыть файл C:WINDOWSSYSTEM32FM20.DLL. Файл «FM20.DLL» может оказаться в другой подпапке Windows, поискать по названию. Может быть в «SysWOW64» или в «System».

Источник

Метод Range.Copy (Excel)

Копирует диапазон в указанный диапазон или в буфер обмена.

Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.

Синтаксис

выражение.Copy (Destination)

выражение: переменная, представляющая объект Range.

Параметры

Имя Обязательный или необязательный Тип данных Описание
Destination Необязательный Variant Указывает новый диапазон, в который будет скопирован заданный диапазон. Если этот аргумент опущен, Microsoft Excel копирует диапазон в буфер обмена.

Возвращаемое значение

Пример

В следующем примере кода копируются формулы ячеек A1:D4 с листа Sheet1 в ячейки с E5:H8 на листе Sheet2.

В приведенном ниже примере кода проверяется значение столбца D для каждой строки на листе Sheet1. Если значение в столбце D равно «A», вся строка копируется на лист SheetA в следующую пустую строку. Если значение равно «B», строка копируется на лист SheetB.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Способы VBA работы с ячейками Excel

Итог: Изучите 3 различных способа копирования и вставки ячеек или диапазонов в Excel с помощью макросов VBA. Это серия из трех частей, также вы сможете скачать файл, содержащий код.

Уровень мастерства: Начинающий

Копировать и вставить: наиболее распространенное действие Excel

Копирование и вставка, вероятно, является одним из самых распространенных действий в Excel. Это также одна из самых распространенных задач, которые мы автоматизируем при написании макросов.

Есть несколько различных способов выполнить эту задачу, и устройство записи макросов не всегда дает вам наиболее эффективный код VBA.

В следующих трех видео я объясняю:

  • Самый эффективный метод для простого копирования и вставки в VBA.
  • Самый простой способ вставить значения.
  • Как использовать метод PasteSpecial для других типов вставок.

Видео № 1: Простой метод «Копировать-вставить»

Видео лучше всего просматривать в полноэкранном HD.

Видео № 2: Простой способ вставить значения

Видео № 3: Метод PasteSpecial

Вставить данные ниже последней заполненной строки

Один из самых распространенных вопросов, которые я получаю о копировании и вставке с помощью VBA: «Как мне вставить данные в конец таблицы? «

Сначала нужно найти последнюю заполненную строку данных, а затем скопировать и вставить ниже неё.

Источник

0 / 0 / 0

Регистрация: 28.04.2011

Сообщений: 60

1

Копирование строки из одной книги в другую

05.10.2011, 17:50. Показов 52410. Ответов 19


Студворк — интернет-сервис помощи студентам

Необходимо скопировать строку под номером 10 с активного листа активной книги, открыть книгу например С:test.xls (с одним листом) и вставить скопированные данные в 5 строку.
Помогите пожалуйста. Темы о копировании строк на форуме нашел, но не разобрался что к чему.
Заранее благодарен.



0



Памирыч

Почетный модератор

21371 / 9105 / 1082

Регистрация: 11.04.2010

Сообщений: 11,014

05.10.2011, 18:38

2

Visual Basic
1
2
3
4
Dim I As Integer
For I = 1 To 20
Cells(5, I).Value = Cells(10, I).Value
Next I

Но это уже совсем по-самодельному

Хотя мне это нравится больше, чем

Visual Basic
1
2
3
4
Rows("10:10").Copy
Rows("5:5").Select
    ActiveSheet.Paste
Application.CutCopyMode = False



1



nt_dmn

0 / 0 / 0

Регистрация: 28.04.2011

Сообщений: 60

05.10.2011, 18:43

 [ТС]

3

я делал очень похоже, но на строку

Visual Basic
1
ActiveSheet.Paste

ругается, в чем причина не пойму…



0



Памирыч

Почетный модератор

21371 / 9105 / 1082

Регистрация: 11.04.2010

Сообщений: 11,014

05.10.2011, 18:45

4

Visual Basic
1
Rows("5:5").Select

Это присутствует?



1



nt_dmn

0 / 0 / 0

Регистрация: 28.04.2011

Сообщений: 60

05.10.2011, 18:48

 [ТС]

5

Присутствует, а ругается потому что нечего вставлять, значит не копирует оператор

Visual Basic
1
Rows("10:10").Copy

, может перед ним тоже поставить

Visual Basic
1
Rows("10:10").Select

Добавлено через 1 минуту
Выделило, но опять ничего не скопировало, буфер пустой



0



Почетный модератор

21371 / 9105 / 1082

Регистрация: 11.04.2010

Сообщений: 11,014

05.10.2011, 18:51

6

Прикрепил книгу



2



nt_dmn

0 / 0 / 0

Регистрация: 28.04.2011

Сообщений: 60

06.10.2011, 10:23

 [ТС]

7

В книге вижу что работает, а у меня почему то нет, ладно… утро вечера мудренее Спасибо за посильную помощь, завтра далее ковырять буду

Добавлено через 15 часов 18 минут
Вот собственно кусок кода:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
'открываем книгу
Workbooks.Open(incoming)
'копируем строку
        Rows("10:10").Select
        Rows("10:10").Copy
        'открываем сводный отчет
        Workbooks.Open (report)
        'выбираем номер начальной строки для поиска последней записи
        nss = 2
        'ищем последнюю запись
        Do While nss <> "1"
            If Range("B" & nss).Value <> "" Then
                'увеличиваем номер строки на 1
                nss = nss + 1
            Else
                'вставляем строку из буфера
                Rows("5:5").Select
                ActiveSheet.Paste
                'присваиваем переменной номера строки значение конца цикла
                nss = 1
            End If
        Loop

Для этого поста я присвоил статичную величину при вставке (5 строка), а вообще надо вставлять в строку nss.
В чем моя ошибка может быть?



0



Busine2009

Заблокирован

06.10.2011, 15:43

8

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub Процедура1()
'Обращаться с книгами будем через переменные
'(кода меньше писать и не промахнёшься мимо нужной книги)
Dim Исходная As Excel.Workbook, Конечная As Excel.Workbook
Dim nss As Long
Set Исходная = ActiveWorkbook
'открываем книгу
Set Конечная = Workbooks.Open("C:Documents and SettingsПользовательРабочий столКнига2.xlsx")
'копируем строку
        Исходная.Worksheets(1).Rows("10:10").Copy
        'выбираем номер начальной строки для поиска последней записи
        nss = 2
        'ищем последнюю запись
        Do While Конечная.Worksheets(1).Range("B" & nss).Value <> ""
            'увеличиваем номер строки на 1
            nss = nss + 1
        Loop
        'вставляем строку из буфера
        Конечная.Worksheets(1).Rows(nss).PasteSpecial
        Конечная.Close SaveChanges:=True
End Sub



1



0 / 0 / 0

Регистрация: 28.04.2011

Сообщений: 60

06.10.2011, 16:11

 [ТС]

9

Так работает, спасибо!

Добавлено через 24 минуты
А ещё нюансик один остался… как добиться что бы происходило копирование только значений, а формулы не копировались в новый документ?



0



Busine2009

Заблокирован

06.10.2011, 16:17

10

Visual Basic
1
Конечная.Worksheets(1).Rows(nss).PasteSpecial Paste:=xlPasteValuesAndNumberFormats

С помощью макрорекордера можно узнавать синтаксис VBA.



1



0 / 0 / 0

Регистрация: 28.04.2011

Сообщений: 60

06.10.2011, 16:48

 [ТС]

11

Спасибо огромное, я просто не спец, сижу разбираюсь, второй день как с vba связался

Добавлено через 23 минуты

Цитата
Сообщение от Busine2009
Посмотреть сообщение

С помощью макрорекордера можно узнавать синтаксис VBA.

…а что такое макрорекодер?



0



Busine2009

Заблокирован

06.10.2011, 17:01

12

nt_dmn,
Excel какого года у вас?



0



0 / 0 / 0

Регистрация: 28.04.2011

Сообщений: 60

06.10.2011, 17:04

 [ТС]

13

Сейчас в 2007 сижу…
А не подскажете ещё где мне отключить оповещение при закрытии файлов «в буфере обмена осталось.. бла бла бла» Чет все настройки перерыл, нету…



0



Busine2009

Заблокирован

06.10.2011, 17:16

14

Цитата
Сообщение от nt_dmn
Посмотреть сообщение

…а что такое макрорекодер?

  1. Круглая кнопкаПараметры ExcelОсновныеПоказывать вкладку «Разработчик на ленте»OK;
  2. вкладка Разработчик — группа КодЗапись макроса;
  3. проделайте какие-нибудь действия (например, введите букву А и нажмите клавишу Enter);
  4. группа КодОстановить запись;
  5. в VBA будет код, который надо подкорректировать.

Цитата
Сообщение от nt_dmn
Посмотреть сообщение

А не подскажете ещё где мне отключить оповещение при закрытии файлов «в буфере обмена осталось.. бла бла бла» Чет все настройки перерыл, нету…

не знаю, можно это сделать с помощью интерфейса программы Excel, а программно вот так делается:
эту строку поместите перед закрытием книги:

Visual Basic
1
Application.DisplayAlerts = False

а эту после закрытия книги:

Visual Basic
1
Application.DisplayAlerts = True



1



0 / 0 / 0

Регистрация: 28.04.2011

Сообщений: 60

06.10.2011, 17:32

 [ТС]

15

Спасибо, со всем разобрался позавчера из познаний у меня был только бэйсик ук нц со школьной программы, за 2 дня уже в vba начал вникать



0



gera_vip

0 / 0 / 0

Регистрация: 13.06.2014

Сообщений: 5

13.06.2014, 15:35

16

Форумчане, подскажите, пожалуйста, как в 12 строчке кода, вместо Rows(«10:10») указать копировать заполненный диапазон, начиная от второй строчки и до конца, где есть записи.
И есть ли возможность, этот макрос привязать к какой-то новой кнопке на ленте? А то с этим еще не разбирался.
Заранее спасибо!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Процедура1()
'Обращаться с книгами будем через переменные
'(кода меньше писать и не промахнёшься мимо нужной книги)
Dim Исходная As Excel.Workbook, Конечная As Excel.Workbook
Dim nss As Long
Set Исходная = ActiveWorkbook
'открываем книгу
Set Конечная = Workbooks.Open("C:Documents and SettingsПользовательРабочий столКнига2.xlsx")
'копируем строку 
'Вот тут :)
Исходная.Worksheets(1).Rows("10:10").Copy
        'выбираем номер начальной строки для поиска последней записи
        nss = 2
        'ищем последнюю запись
        Do While Конечная.Worksheets(1).Range("B" & nss).Value <> ""
            'увеличиваем номер строки на 1
            nss = nss + 1
        Loop
        'вставляем строку из буфера
        Конечная.Worksheets(1).Rows(nss).PasteSpecial
        Конечная.Close SaveChanges:=True
End Sub



0



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

13.06.2014, 16:09

17

Попробуйте так (не проверял):

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Процедура1()
'Обращаться с книгами будем через переменные
'(кода меньше писать и не промахнёшься мимо нужной книги)
    Dim Исходная As Excel.Workbook, Конечная As Excel.Workbook
    Set Исходная = ActiveWorkbook
    'открываем книгу
    Set Конечная = Workbooks.Open("C:Documents and SettingsПользовательРабочий столКнига2.xlsx")
    'копируем строку
    'Вот тут :)
    Исходная.Worksheets(1).Range("B2").CurrentRegion.Copy Конечная.Worksheets(1).Cells(Rows.Count, "B").End(xlUp)(2, 0)
    Конечная.Close SaveChanges:=True
End Sub



1



0 / 0 / 0

Регистрация: 13.06.2014

Сообщений: 5

13.06.2014, 16:19

18

Hugo, а что поменять, чтобы копировались не все данные, а начиная со второй строки и до конца, т.к. в первой строке идут названия столбцов?



0



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

13.06.2014, 16:50

19

Visual Basic
1
    Исходная.Worksheets(1).Range("B2").CurrentRegion.Offset(1).Copy Конечная.Worksheets(1).Cells(Rows.Count, "B").End(xlUp)(2, 0)

Будет правда ещё снизу одну пустую строку прихватывать — но это ведь ерунда. Можно убрать ресайсом, но лень.



1



0 / 0 / 0

Регистрация: 13.06.2014

Сообщений: 5

13.06.2014, 18:16

20

Hugo, огромнейшая благодарность!!! Работает!



0



Excel VBA Tutorial about how to copy paste cellsCopy and paste are 2 of the most common Excel operations. Copying and pasting a cell range (usually containing data) is an essential skill you’ll need when working with Excel VBA.

You’ve probably copied and pasted many cell ranges manually. The process itself is quite easy.

Well…

You can also copy and paste cells and ranges of cells when working with Visual Basic for Applications. As you learn in this Excel VBA Tutorial, you can easily copy and paste cell ranges using VBA.

However, for purposes of copying and pasting ranges with Visual Basic for Applications, you have a variety of methods to choose from.

My main objective with this Excel tutorial is to introduce to you the most important VBA methods and properties that you can use for purposes of carrying out these copy and paste activities with Visual Basic for Applications in Excel. In addition to explaining everything you need to know in order to start using these different methods and properties to copy and paste cell ranges, I show you 8 different examples of VBA code that you can easily adjust and use immediately for these purposes.

The following table of contents lists the main topics (and VBA methods) that I cover in this blog post. Use the table of contents to navigate to the topic that interests you at the moment, but make sure to read all sections 😉 .

Let’s start by taking a look at some information that will help you to easily modify the source and destination ranges of the sample macros I provide in the sections below (if you need to).

Scope Of Macro Examples In This Tutorial And How To Modify The Source Or Destination Cells

As you’ve seen in the table of contents above, this Excel tutorial covers several different ways of copying and pasting cells ranges using VBA. Each of these different methods is accompanied by, at least, 1 example of VBA code that you can adjust and use immediately.

All of these macro examples assume that the sample workbook is active and the whole operation takes place on the active workbook. Furthermore, they are designed to copy from a particular source worksheet to another destination worksheet within that sample workbook.

You can easily modify these behaviors by adjusting the way in which the object references are built. You can, for example, copy a cell range to a different worksheet or workbook by qualifying the object reference specifying the destination cell range.

Similar comments apply for purposes of modifying the source and destination cell ranges. More precisely, to (i) copy a different range or (ii) copy to a different destination range, simply modify the range references.

For example, in the VBA code examples that I include throughout this Excel tutorial, the cell range where the source data is located is referred to as follows:

Worksheets("Sample Data").Range("B5:M107")

This reference isn’t a fully qualified object reference. More precisely, it assumes that the copying and pasting operations take place in the active workbook.

The following reference is the equivalent of the above, but is fully qualified:

Workbooks("Book1.xlsm").Worksheets("Sample Data").Range("B5:M107")

This fully qualified reference doesn’t assume that Book1.xlsm is the active workbook. Therefore, the reference works appropriately regardless of which Excel workbook is active.

I explain how to work with object references in detail in The Essential Guide To Excel’s VBA Object Model And Object References. Similarly, I explain how to work with cell ranges in Excel’s VBA Range Object And Range Object References: The Tutorial for Beginners. I suggest you refer to these posts if you feel you need to refresh your knowledge about these topics, or if you’re not familiar with them. They will probably help you to better understand this Excel tutorial and how to modify the sample macros I include here.

You’ll also notice that within the VBA code examples that I include in this Excel tutorial, I always qualify the references up to the level of the worksheet. Strictly speaking, this isn’t always necessary. In fact, when implementing similar code in your VBA macros, you may want to modify the references by, for example:

  • Using variables.
  • Further simplifying the object references (not qualifying them up to the level of the worksheet).
  • Using the With… End With statement.

The reason I’ve decided to keep references qualified up to the level of the worksheet is because the focus of this Excel tutorial is on how to copy and paste using VBA. Not on simplifying references or using variables, which are topics I cover in separate blog posts, such as those I link to above (and which I suggest you take a look at).

The Copy Command In Excel’s Ribbon

Before we go into how to copy a range using Visual Basic for Applications, let’s take a quick look at Excel’s ribbon:

Perhaps one of the most common used buttons in the Ribbon is “Copy”, within the Home tab.

Excel Ribbon with Copy button

When you think about copying ranges in Excel, you’re probably referring to the action carried out by Excel when you press this button: copying the current active cell or range of cells to the Clipboard.

You may have noticed, however, that the Copy button isn’t just a simple button. It’s actually a split button:

I explain how you can automate the functions of both of these commands in this Excel tutorial. More precisely:

  • If you want to work with the regular Copy command, you’ll want to read more about the Range.Copy method, which I explain in the following section.
  • If you want to use the Copy as Picture command, you’ll be interested in the Range.CopyPicture method, which I cover below.

Let’s start by taking a look at…

Excel VBA Copy Paste With The Range.Copy Method

The main purpose of the Range.Copy VBA method is to copy a particular range.

When you copy a range of cells manually by, for example, using the “Ctrl + C” keyboard shortcut, the range of cells is copied to the Clipboard. You can use the Range.Copy method to achieve the same thing.

However, the Copy method provides an additional option:

Copying the selected range to another range. You can achieve this by appropriately using the Destination parameter, which I explain in the following section.

In other words, you can use Range.Copy for copying a range to either of the following:

  • The Clipboard.
  • A certain range.

The Range.Copy VBA Method: Syntax And Parameters

The basic syntax of the Range.Copy method is as follows:

expression.Copy(Destination)

“expression” is the placeholder for the variable representing the Range object that you want to copy.

The only parameter of the Copy VBA method is Destination. This parameter is optional, and allows you to specify the range to which you want to copy the copied range. If you omit the Destination parameter, the copied range is simply copied to the Clipboard.

This means that the appropriate syntax you should use for the Copy method (depending on your purpose) is as follows:

  • To copy a Range object to the Clipboard, omit the Destination parameter. In such a case, use the following syntax:
    expression.Copy
  • To copy the Range object to another (the destination) range, use the Destination parameter to specify the destination range. This means that you should use the following syntax:
    expression.Copy(Destination)

Let’s take a look at how you can use the Range.Copy method to copy and paste a range of cells in Excel:

Macro Examples #1 And #2: The VBA Range.Copy Method

This Excel VBA Copy Paste Tutorial is accompanied by an Excel workbook containing the data and macros I use. You can get immediate free access to this workbook by clicking the button below.

Get immediate free access to the Excel VBA Copy Paste workbook example

For this particular example, I’ve created the following table. This table displays the sales of certain items (A, B, C, D and E) made by 100 different sales managers in terms of units and total Dollar value. The first row (above the main table), displays the unit price for each item. The last column displays the total value of the sales made by each manager.

Sample table for Copy Paste VBA Excel

Macro Example #1: Copy A Cell Range To The Clipboard

First, let’s take a look at how you can copy all of the items within the sample worksheet (table and unit prices) to the Clipboard. The following simple macro (called “Copy_to_Clipboard”) achieves this:

Excel Macro Copy Paste Example #1

This particular Sub procedure is made out of the following single statement:

Worksheets("Sample Data").Range("B5:M107").Copy

This statement is made up by the following 2 items:

Let’s take a look at this macro in action. Notice how, once I execute the Copy_to_Clipboard macro, the copied range of cells is surrounded by the usual dashed border that indicates that the range is available for pasting.

After executing the macro, I go to another worksheet and paste all manually. As a last step, I autofit the column width to ensure that all the data is visible.

Practical example copy and paste with Excel macro

Even though the sample Copy_to_Clipboard macro does what it’s supposed to do and is a good introduction to the Range.Copy method, it isn’t very powerful. It, literally, simply copies the relevant range to the Clipboard. You don’t really need a macro to do only that.

Fortunately, as explained above, the Range.Copy method has a parameter that allows you to specify the destination of the copied range. Let’s use this to improve the power of the sample macro:

Macro Example #2: Copy A Cell Range To A Destination Range

The following sample Sub procedure (named “Copy_to_Range”) takes the basic Copy_to_Clipboard macro used as example #1 above and adds the Destination parameter.

Excel VBA Copy Paste macro example #2

Even though it isn’t the topic of this Excel tutorial, I include an additional statement that uses the Range.AutoFit method.

Range.AutoFit method in Excel macro example

Let’s take a closer look at each of the lines of code within this sample macro:

Line #1: Worksheets(“Sample Data”).Range(“B5:M107”).Copy

This is, substantially, the sample “Copy_to_Clipboard” macro which I explain in the section above.

More precisely, this particular line uses the Range.Copy method for purposes of copying the range of cells cells B5 and M107 of the worksheet called “Sample Data”.

However, at this point of the tutorial, our focus isn’t in the Copy method itself but rather in the Destination parameter which appears in…

Line #2: Destination:=Worksheets(“Example 2 – Destination”).Range(“B5:M107”)

You use the Destination parameter of the Range.Copy method for purposes of specifying the destination range in which to which the copied range of cells should be copied. In this particular case, the destination range is cells B5 to M107 of the worksheet named “Example 2 – Destination”, as shown in the image below:

Destination parameter of Range.Copy method in example

As I explain above, you can easily modify this statement for purposes of specifying a different destination. For example, for purposes of specifying a destination range in a different Excel workbook, you just need to qualify the object reference.

Line #3: Worksheets(“Example 2 – Destination”).Columns(“B:M”).AutoFit

As anticipated above, this statement isn’t absolutely necessary for the sample macro to achieve its main purpose of copying the copied range in the destination range. Its purpose is solely to autofit the column width of the destination range.

For these purposes, I use the Range.Autofit method. The syntax of this method is as follows:

expression.AutoFit

In this particular case, “expression” represents a Range object, and must be either (i) a range of 1 or more rows, or (ii) a range of 1 or more columns. In the Copy_to_Range macro example, the Range object is columns B through M of the worksheet titled “Example 2 – Destination”. The following image shows how this range is specified within the VBA code.

Excel VBA Copy Paste macro example with AutoFit

The following image shows the results obtained when executing the Copy_to_Range macro. Notice how this worksheet looks substantially the same as the source worksheet displayed above.

Sample table copied with VBA in Excel

If you were to compare the results obtained when copying a range to the Clipboard (example #1) with the results obtained when copying the range to a destination range (example #2), you may conclude that the general rule is that one should always use the Destination parameter of the Copy method.

To a certain extent, this is generally true and some Excel authorities generally discourage using the Clipboard. However, the choice between copying to the Clipboard or copying to a destination range isn’t always so straightforward. Let’s take a look at why this is the case:

The Range.Copy VBA Method: When To Copy To The Clipboard And When To Use The Destination Parameter

In my opinion, if you can achieve your purposes without copying to the Clipboard, you should simply use the Destination parameter of the Range.Copy method.

Using the Destination parameter is, generally, more efficient that copying to the Clipboard and then using the Range.PasteSpecial method or the Worksheet.Paste method (both of which I explain below). Copying to the Clipboard and pasting (with the Range.PasteSpecial or Worksheet.Paste methods) involves 2 steps:

  1. Copying.
  2. Pasting.

This 2-step process (usually):

  • Increases the procedure’s memory requirements.
  • Results in (slightly) less efficient procedures.

I explain this argument further in example #4 below, which introduces the Worksheet.Paste method. The Worksheet.Paste method is one of the VBA methods you’d use for purposes of pasting the data that you’ve copied to the Clipboard with the Range.Copy method.

Avoiding the Clipboard whenever possible may be a good idea to reduce the risks of data loss or leaks of information whenever another application is using the Clipboard at the same time. Some users report unpredictable Clipboard behavior in certain cases.

Considering this arguments, you probably understand why I say that, if you can avoid the Clipboard, you probably should.

However, using the Range.Copy method with the Destination parameter may not be the most appropriate solution always. For purposes of determining when the Destination parameter allows you to achieve the purpose you want, it’s very important that you’re aware of how the Range.Copy method works, particularly what it can (and can’t do). Let’s see an example of what I mean:

If you go back to the screenshots showing the results of executing the sample macros #1 (Copy_to_Clipboard) and #2 (Copy_to_Range), you’ll notice that the end result is that the destination worksheet looks pretty much the same as the source worksheet.

In other words, Excel copies and pastes all (for ex., values, formulas, formats).

In some cases, this is precisely what you want. However:

In other cases, this is precisely what you don’t want. Take a look, for example, at the following Sub procedure:

VBA code to copy and paste with error modification

At first glance, this is the Copy_to_Range macro that I introduce and explain in the section above. Notice, however, that I’ve changed the Destination parameter. More precisely, in this version of the Copy_to_Range macro, the top-left cell of the destination range is cell B1 (instead of B5, as it was originally) of the “Example 2 – Destination” worksheet.

Example of macro to copy and paste with change in destination

The following GIF shows what happens when I execute this macro. The worksheet shown is the destination “Example 2 – Destination” worksheet, and I’ve enabled iterative calculations (I explain to you below why I did this).

Macro copying and pasting cells in wrong destination

As you can see immediately, there’s something wrong. The total sales for all items are, clearly, inaccurate.

Result of macro with wrong copy destination

The reason for this is that, in the original table, I used mixed references in order to refer to the unit prices of the items. Notice, for example, the formula used to calculate the total sales of Item A made by Sarah Butler (the first Sales Manager in the table):

Excel formula with mixed reference

These formulas aren’t a problem as long as the destination cells are exactly the same as the source cells. This is the case in both examples #1 and #2 above where, despite the worksheet changing, the destination continues to be cells B5 to M107. That guarantees that the mixed references continue to point to the right cell.

However, once the destination range changes (as in the example above), the original mixed references wreak havoc on the worksheet. Take a look, for example, at the formula used to calculate the total sales of Item B by Sales Manager Walter Perry (second in the table):

Example of Excel formula with mixed circular reference

The formula doesn’t use the unit price of Item B (which appears in cell F1) to calculate the sales. Instead, it uses cell F5 as a consequence of the mixed references copied from the source worksheet. This results in (i) the wrong result and (ii) a circular reference.

By the way, if you’re downloading the sample workbook that accompanies this Excel tutorial, it will have circular references.

In such (and other similar) cases, you may not want to rely solely on the Range.Copy method with the Destination parameter. In other words: There are cases where you don’t want to copy and paste all the contents of the source cell range. There are, for example, cases where you may want to:

  • Copy a cell range containing formulas; and
  • Paste values in the destination cell range.

This is precisely what happens in the case of the example above. In such a situation, you may want to paste only the values (no formulas).

For purposes of controlling what is copied in a particular destination range when working with VBA, you must understand the Range.PasteSpecial method. Let’s take a look at it:

Excel VBA Copy Paste With The Range.PasteSpecial Method

Usually, whenever you want to control what Excel copies in a particular destination range, you rely on the Paste Special options. You can access these options, for example, through the Paste Special dialog box.

Paste Special dialog box in Excel

When working with Visual Basic for Applications, you usually rely on the Range.PasteSpecial method for purposes of controlling what is copied in the destination range.

Generally speaking, the Range.PasteSpecial method allows you to paste a particular Range object from the Clipboard into the relevant destination range. This, by itself, isn’t particularly exciting.

The power of the Range.PasteSpecial method comes from its parameters, and the ways in which they allow you to further determine the way in which Excel carries out the pasting. Therefore, let’s take a look at…

The Range.PasteSpecial VBA Method: Syntax And Parameters

The basic syntax of the Range.PasteSpecial method is as follows:

expression.PasteSpecial(Paste, Operation, SkipBlanks, Transpose)

“expression” represents a Range object. The PasteSpecial method has 4 optional parameters:

  • Parameter #1: Paste.
  • Parameter #2: Operation.
  • Parameter #3: SkipBlanks.
  • Parameter #4: Transpose.

Notice how each of these parameters roughly mimics most of the different sections and options of the Paste Special dialog box shown above. The main exception to this general rule is the Paste Link button.

Paste Special dialog with Paste Link button

I explain how you can paste a link below.

For the moment, let’s take a closer look at each of these parameters:

Parameter #1: Paste

The Paste parameter of the PasteSpecial method allows you to specify what is actually pasted. This parameter is the one that, for example, allows you specify that only the values (or the formulas) should be pasted in the destination range.

This is, roughly, the equivalent of the Paste section in the Paste Special dialog box shown below:

Paste Special dialog with Paste parameters

The Paste parameter can take any of 12 values that are specified in the XlPasteType enumeration:

Parameter #2: Operation

The Operation parameter of the Range.PasteSpecial method allows you to specify whether a mathematical operation is carried out with the destination cells. This parameter is roughly the equivalent of the Operation section of the Paste Special dialog box.

Operation options within Paste Special dialog box

The Operation parameter can take any of the following values from the XlPasteSpecialOperation enumeration:

Parameter #3: SkipBlanks

You can use the SkipBlanks parameter of the Range.PasteSpecial method to specify whether the blank cells in the copied range should be (or not) pasted in the destination range.

Paste Special dialog with Skip blanks

SkipBlanks can be set to True or False, as follows:

  • If SkipBlanks is True, the blank cells within the copied range aren’t pasted in the destination range.
  • If SkipBlanks is False, those blank cells are pasted.

False is the default value of the SkipBlanks parameter. If you omit SkipBlanks, the blank cells are pasted in the destination range.

Parameter #4: Transpose

The Transpose parameter of the Range.PasteSpecial VBA method allows you to specify whether the rows and columns of the copied range should be transposed (their places exchanged) when pasting.

Paste Special dialog with Transpose option

You can set Transpose to either True or False. The consequences are as follows:

  • If Transpose is True, rows and columns are transposed when pasting.
  • If Transpose is False, Excel doesn’t transpose anything.

The default value of the Transpose parameter is False. Therefore, if you omit it, Excel doesn’t transpose the rows and columns of the copied range.

Macro Example #3: Copy And Paste Special

Let’s go back once more to the sample macros and see how we can use the Range.PasteSpecial method to copy and paste the sample data.

The following sample Sub procedure, called “Copy_PasteSpecial” shows 1 of the many ways in which you can do this:

Example macro to copy and paste special

When using the Range.Copy method to copy to the Clipboard (as in the case above) you can end the macro with the statement “Application.CutCopyMode = False”, which I explain in more detail towards the end of this blog post. This particular statement cancels Cut or Copy mode and removes the moving border.

Let’s take a look at each of the lines of code to understand how this macro achieves its purpose:

Line #1: Worksheets(“Sample Data”).Range(“B5:M107”).Copy

This statement appears in both of the previous examples.

As explained in those previous sections, its purpose is to copy the range between cells B5 and M107 of the worksheet named “Sample Data” to the Clipboard.

Lines #2 Through #6 Worksheets(“Example 3 – PasteSpecial”).Range(“B5”).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlPasteSpecialOperationNone, SkipBlanks:=False, Transpose:=True

These lines of code make reference to the Range.PasteSpecial method that I explain in the previous section. In order to take a closer look at it, let’s break down this statement into the following 6 items:

Macro example with Range.PasteSpecial method

And let’s take a look at each of the items separately:

  • Item #1: “Worksheets(“Example 3 – PasteSpecial”).Range(“B5″)”.
    • This is a Range object. Within the basic syntax of the PasteSpecial method that I introduce above, this item is the “expression”.
    • This range is the destination range, where the contents of the Clipboard are pasted. In this particular case, the range is identified by its worksheet (“Example 3 – PasteSpecial” of the active workbook) and the upper-left cell of the cell range (B5).
    • To paste the items that you have in the Clipboard in a different workbook, simply qualify this reference as required and explained above.
  • Item #2: “PasteSpecial”.
    • This item simply makes reference to the Range.PasteSpecial method.
  • Item #3: “Paste:=xlPasteValuesAndNumberFormats”.
    • This is the Paste parameter of the PasteSpecial method. In this particular case, the argument is set to equal xlPasteValuesAndNumberFormats. The consequence of this, as explained above, is that only values and number formats are pasted. Other items, such as formulas and borders, aren’t pasted in the destination range.
  • Item #4: “Operation:=xlPasteSpecialOperationNone”.
    • The line sets the Operation parameter of the Range.PasteSpecial method to be equal to xlPasteSpecialOperationNone. As I mention above, this means that Excel carries out no calculation when pasting the contents of the Clipboard.
  • Item #5: “SkipBlanks:=False”.
    • This line confirms that the value of the SkipBlanks parameter is False (which is its default value anyway). Therefore, if there were blank cells in the range held by the Clipboard, they would be pasted in the destination.
  • Item #6: “Transpose:=True”.
    • The final parameter of the Range.PasteSpecial method (Transpose) is set to True by this line. As a consequence of this, rows and columns are transposed upon being pasted.

The purpose of this code example is just to show you some of the possibilities that you have when working with the Range.PasteSpecial VBA method. It doesn’t mean it’s how I would arrange the data it in real life. For example, if I were implementing a similar macro for copying similarly organized data, I wouldn’t transpose the rows and columns (you can see how the transposing looks like in this case further below).

In any case, since the code includes all of the parameters of the Range.PasteSpecial method, and I explain all of those parameters above, you shouldn’t have much problem making any adjustments.

Line #7: Worksheets(“Example 3 – PasteSpecial”).Columns(“B:CZ”).AutoFit

This line is substantially the same as the last line of code within example #2 above (Copy_to_Range). Its purpose is exactly the same:

This line uses the Range.AutoFit method for purposes of autofitting the column width.

The only difference between this statement and that in example #2 above is the column range to which it is applied. In example #2 (Copy_to_Range) above, the autofitted columns are B to M (Range(“B5:M107”)). In this example #3 (Copy_PasteSpecial), the relevant columns are B to CZ (Columns(“B:CZ”)).

The reason why I make this adjustment is the layout of the data and, more precisely, the fact that the Copy_PasteSpecial macro transposes the rows and columns. This results in the table extending further horizontally.

The following screenshot shows the results of executing the Copy_PasteSpecial macro. Notice, among others, how (i) no borders have been pasted (a consequence of setting the Paste parameter to xlPasteValuesAndNumberFormats), and (ii) the rows and columns are transposed (a consequence of setting Transpose to equal True).

Results of macro to copy and paste with transpose

If you only need to copy values (the equivalent of setting the Paste parameter to xlPasteValues) or formulas (the equivalent of setting the Paste parameter to xlPasteFormulas), you may prefer to set the values or the formulas of the destination cells to be equal to that of the source cells instead of using the Range.Copy and Range.PasteSpecial methods. I explain how you can do this (alongside an example) below.

As you can see, you can use the PasteSpecial method to replicate all of the options that appear in the Paste Special dialog box, except for the Paste Link button that appears on the lower left corner of the dialog.

Paste Special dialog with Paste Link

Let’s take a look at a VBA method you can use for these purposes:

Excel VBA Copy Paste With The Worksheet.Paste Method

The Worksheet.Paste VBA method (Excel VBA has no Range.Paste method) is, to a certain extent, very similar to the Range.PasteSpecial method that I explain in the previous section. The main purpose of the Paste method is to paste the contents contained by the Clipboard on the relevant worksheet.

However, as the following section makes clear, there are some important differences between both methods, both in terms of syntax and functionality. Let’s take a look at this:

Worksheet.Paste VBA Method: Syntax And Parameters

The basic syntax of the Worksheet.Paste method is:

expression.Paste(Destination, Link)

The first difference between this method and the others that I explain in previous sections is that, in this particular case, “expression” stands for a Worksheet object. In other cases we’ve seen in this Excel tutorial (such as the Range.PasteSpecial method), “expression” is a variable representing a Range object.

The Paste method has the following 2 optional parameters. They have some slightly particular conditions which differ from what we’ve seen previously in this same blog post.

  • Destination: Destination is a Range object where the contents of the Clipboard are to be pasted.
    • Since the Destination parameter is optional, you can omit it. If you omit Destination, Excel pastes the contents of the Clipboard in the current selection. Therefore, if you omit the argument, you must select the destination range before using the Worksheet.Paste method.
    • You can only use the Destination argument if 2 conditions are met: (i) the contents of the Clipboard can be pasted into a range, and (ii) you’re not using the Link parameter.
  • Link: You use the Link parameter for purposes of establishing a link to the source of the pasted data. To do this, you set the value to True. The default value of the parameter is False, meaning that no link to the source data is established.
    • If you’re using the Destination parameter when working with the Worksheet.Paste method, you can’t use the Link parameter. Macro example #5 below shows how one way in which you can specify the destination for pasting links.

Let’s take a look at 2 examples that show the Worksheet.Paste method working in practice:

Macro Example #4: Copy And Paste

The following sample macro (named “Copy_Paste”) works with exactly the same data as the previous examples. It shows how you can use the Worksheet.Paste method for purposes of copying and pasting data.

Macro example to copy and paste in Excel

Just as with the previous example macro #3, since this particular macro uses the Clipboard, you can add the statement “Application.CutCopyMode = False” at the end of the macro for purposes of cancelling the Cut or Copy mode. I explain this statement in more detail below.

Let’s take a look at each of the lines of code to understand how this sample macro proceeds:

Line #1: Worksheets(“Sample Data”).Range(“B5:M107”).Copy

This statement is the same as the first statement of all the other sample macros that I’ve introduced in this blog post. I explain its different items the first time is used.

Its purpose is to copy the contents within cells B5 to M107 of the “Sample Data” worksheet to the Clipboard.

Lines #2 And #3: Worksheets(“Example 4 – Paste”).Paste Destination:=Worksheets(“Example 4 – Paste”).Range(“B5:M107”)

This statement uses the Worksheet.Paste method for purposes of pasting the contents of the Clipboard (determined by line #1 above) in the destination range of cells.

To be more precise, let’s break down the statement into the following 3 items:

Sample macro code to copy and paste in Excel

  • Item #1: “Worksheets(“Example 4 – Paste”)”.
    • This item represents the worksheet named “Example 4 – Paste”. Within the basic syntax of the Worksheet.Paste method that I explain above, this is the expression variable representing a Worksheet object.
    • You can easily modify this object reference by, for example, qualifying it as I introduce above. This allows you to, for example, paste the items that are in the Clipboard in a different workbook.
  • Item #2: “Paste”.
    • This is the Paste method.
  • Item #3: “Destination:=Worksheets(“Example 4 – Paste”).Range(“B5:M107″)”.
    • The last item within the statement we’re looking at is the Destination parameter of the Worksheet.Paste method. In this particular case, the destination is the range of cells B5 to M107 within the worksheet named “Example 4 – Paste”.

Line #4: Worksheets(“Example 4 – Paste”).Columns(“B:M”).AutoFit

This is an additional line that I’ve added to most of the sample macros within this Excel tutorial for presentation purposes. Its purpose is to autofit the width of the columns within the destination range.

I explain this statement it in more detail above.

The end result of executing the sample macro above (Copy_Paste) is as follows:

Excel VBA Copy Paste table result

These results are substantially the same as those obtained when executing the macro in example #2 above (Copy_to_Range), which only used the Range.Copy method with a Destination parameter. Therefore, you may not find this particular application of the Worksheet.Paste method particularly interesting.

In fact, in such cases, you’re probably better off by using the Range.Copy method with a Destination parameter instead of using the Worksheet.Paste method (as in this example). The main reason for this is that the Range.Copy method is more efficient and faster.

The Worksheet.Paste method pastes the Clipboard contents to a worksheet. You must (therefore) carry out a 2-step process (to copy and paste a cell range):

  1. Copy a cell range’s contents to the Clipboard.
  2. Paste the Clipboard’s contents to a worksheet.

If you use the macro recorder for purposes of creating a macro that copies and pastes a range of cells, the recorded code generally uses the Worksheet.Paste method. Recorded code (usually) follows a 3-step process:

  1. Copy a cell range’s contents to the Clipboard.
  2. Select the destination cell range.
  3. Paste the Clipboard’s contents to the selected (destination) cell range.

You can (usually) achieve the same result in a single step by working with the Range.Copy method and its Destination parameter. As a general rule, directly copying to the destination cell range (by using the Range.Copy method with a Destination parameter) is more efficient than both of the following:

  • Copying to the Clipboard and pasting from the Clipboard.
  • Copying to the Clipboard, selecting the destination cell range, and pasting from the Clipboard.

I provide further reasons why, when possible, you should try to avoid copying to the Clipboard near the beginning of this blog post when answering the question of whether, when working with the Range.Copy method, you should copy to the Clipboard or a Destination. Overall, there seems to be little controversy around the suggestion that (when possible) you should avoid the multi-step process of copying and pasting.

The next example uses the Worksheet.Paste method again, but for purposes of setting up links to the source data.

Macro Example #5: Copy And Paste Links

The following sample macro (Copy_Paste_Link) uses, once more, the Worksheet.Paste method that appears in the previous example. The purpose of using this method is, however, different.

More precisely, this sample macro #5 uses the Worksheet.Paste method for purposes of pasting links to the source data.

Example VBA code to copy and paste links

As with the other macro examples within this tutorial that use the Clipboard, you may want to use the Application.CutCopyMode property for purposes of cancelling Cut or Copy mode. To do this, add the statement “Application.CutCopyMode = False” at the end of the Sub procedure. I explain this particular topic below.

Let’s take a closer look at each of the lines of code to understand the structure of this macro, which differs from others we’ve previously seen in this Excel tutorial.

Line #1: Worksheets(“Sample Data”).Range(“B5:M107”).Copy

This statement, used in all of the previous sample macros and explained above, copies the range of cells B5 to M107 within the “Sample Data” worksheet to the Clipboard.

Line #2: Worksheets(“Example 4 – Paste”).Activate

This statement uses the Worksheet.Activate method. The main purpose of the Worksheet.Activate VBA method is to activate the relevant worksheet. As explained in the Microsoft Dev Center, it’s “the equivalent to clicking the sheet’s tab”.

The basic syntax of the Worksheet.Activate method is:

expression.Activate[/code]

“expression” is a variable representing a Worksheet object. In this particular macro example, “expression” is “Worksheets(“Example 5 – Paste Link”)”.

You can also activate a worksheet in a different workbook by qualifying the object reference, as I introduce above.

Line #3: ActiveSheet.Range(“B5”).Select

This particular statement uses the Range.Select VBA method. The purpose of this method is to select the relevant range.

The syntax of the Range.Select method is:

expression.Select

In this particular case, “expression” is a variable representing a Range object. In the example we’re looking at, this expression is “ActiveSheet.Range(“B5″)”.

The first item within this expression (“ActiveSheet”) is the Application.ActiveSheet property. This property returns the active sheet in the active workbook. The second item (“Range (“B5″)”) makes reference to cell B5.

As a consequence of the above, this statement selects cell B5 of the “Example 5 – Paste Link” worksheet. This worksheet was activated by the previous line of code.

Lines #4 And #5: ActiveSheet.Paste Link:=True

The use of the Worksheet.Activate method in line #2 and the Range.Select method in line #3 is an important difference between this macro sample #5 and the previous sample macros we’ve seen in this tutorial.

The reason why this particular Sub procedure (Copy_Paste_Link) uses the Worksheet.Activate and Range.Select method is that you can’t use the Destination parameter of the Paste method when using the Link parameter. In the absence of the Destination parameter, the Worksheet.Paste method pastes the contents of the Clipboard on the current selection. That current selection is (in this case) determined by the Worksheet.Activate and Range.Select methods as shown above.

In other words, since cell B5 of the “Example 5 – Paste Link” worksheet is the current selection, this is where the items within the Clipboard are pasted.

VBA code example to copy and paste with Activate and Select methods

This particular statement uses the Worksheet.Paste method alongside with its Link parameter for purposes of only pasting links to the data sources. This is done by setting the Link parameter to True.

Sample VBA code with Worksheet.Paste method

Line #5: Worksheets(“Example 5 – Paste Link”).Columns(“B:M”).AutoFit

This line isn’t absolutely necessary for purposes of copying and pasting links. I include it, mainly, for purposes of improving the readability of the destination worksheet (Example 5 – Paste Link).

Since this line repeats itself in other sample macros within this blog post, I explain it in more detail above. For purposes of this section, is enough to know that its purpose is to autofit the width of the destination columns (B through M) of the worksheet where the links are pasted (Example 5 – Paste Link).

The following image shows the results of executing the sample Copy_Paste_Link macro. Notice the effects this has in comparison with other methods used by previous sample macros. In particular, notice how (i) no borders or number formatting has been pasted, and (ii) cells that are blank in the source range result in a 0 being displayed when the link is established.

Excel table result of copying and pasting links with VBA

Excel VBA Copy Paste With The Range.CopyPicture Method

As anticipated above, the Range.CopyPicture VBA method allows you to copy a Range object as a picture.

The object is always copied to the Clipboard. In other words, there’s no Destination parameter that allows you to specify the destination of the copied range.

Range.CopyPicture Method: Syntax And Parameters

The basic syntax of the Range.CopyPicture method is the following:

expression.CopyPicture(Appearance, Format)

“expression” stands for the Range object you want to copy.

The CopyPicture method has 2 optional parameters: Appearance and Format. Notice that these 2 parameters are exactly the same as those that Excel displays in the Copy Picture dialog box.

Copy Picture regular dialog in Excel

This Copy Picture dialog box is displayed when you manually execute the Copy as Picture command.

The purpose and values that each of the parameters (Appearance and Format) can take within Visual Basic for Applications reflect the Copy Picture dialog box. Let’s take a look at what this means more precisely:

The Appearance parameter specifies how the copied range is actually copied as a picture. Within VBA, you specify this by using the appropriate value from the XlPictureAppearance enumeration. More precisely:

  • xlScreen (or 1) means that the appearance should resemble that displayed on screen as close as possible.
  • xlPrinter (or 2) means that the picture is copied as it is shown when printed.

The Format parameter allows you to specify the format of the picture. The enumeration you use to specify the formats is the XlCopyPictureFormat enumeration, which is as follows:

  • xlBitmap (or 2) stands for bitmap (.bmp, .jpg or .gif formats).
  • xlPicture (or -4147) represents drawn picture (.png, .wmf or .mix) formats.

Let’s take a look at an example which uses the Range.CopyPicture VBA method in practice:

Macro Example #6: Copy As Picture

The following Sub procedure (Copy_Picture) works with the same source data as all of the previous examples. However, in this particular case, the data is copied as a picture thanks to the Range.CopyPicture method.

Example VBA code to copy as picture

Let’s go through each of the lines of code separately to understand how the macro works:

Lines #1 To #3: Worksheets(“Sample Data”).Range(“B5:M107”).CopyPicture Appearance:=xlScreen, Format:=xlPicture

Lines #1 through #3 use the Range.CopyPicture VBA method for purposes of copying the relevant range of cells as a picture.

Notice how, this line of code is very similar to, but not the same as, the opening statements in all of the previous sample macros. The reason for this is that, this particular macro example #6 uses the Range.CopyPicture method instead of the Range.Copy method used by the previous macro samples.

Let’s break this statement in the following 4 items in order to understand better how it works and how it differs from the previous macro examples:

Example macro code to copy as picture

  • Item #1: “Worksheets(“Sample Data”).Range(“B5:M107″)”.
    • This item uses the Worksheet.Range property for purposes of returning the range object that is copied as a picture. More precisely, this Range object that is copied as a picture is made up of cells B5 to 107 within the “Sample Data” worksheet.
  • Item #2: “CopyPicture”.
    • This makes reference to the Range.CopyPicture method that we’re analyzing.
  • Item #3: “Appearance:=xlScreen”.
    • This item is the Appearance property of the Range.CopyPicture method. You can use this for purposes of specifying how the copied range is copied as a picture. In this particular case, Excel copies the range in such a way that it resembles how it’s displayed on the screen (as much as possible).
  • Item #4: “Format:=xlPicture”.
    • This is the Format property of the CopyPicture method. You can use this property to determine the format of the copied picture. In this particular example, the value of xlPicture represents drawn picture (.png, .wmf or .mix) formats.

Lines #5 And #6: Worksheets(“Example 6 – Copy Picture”).Paste Destination:=Worksheets(“Example 6 – Copy Picture”).Range(“B5”)

This statement uses the Worksheets.Paste method that I explain above for purposes of pasting the picture copied using the Range.CopyPicture method above. Notice how this statement is very similar to that which I use in macro example #4 above.

In order to understand in more detail how the statement works, let’s break it into the following 3 items:

Example of macro to copy as picture and paste

  • Item #1: “Worksheets(“Example 6 – Copy Picture”)”.
    • This item uses the Applications.Worksheets VBA property for purposes of returning the worksheet where the picture that’s been copied previously is pasted. In this particular case, that worksheet is “Example 6 – Copy Picture”.
    • If you want to paste the picture in a different workbook, you just need to appropriately qualify the object reference as I explain at the beginning of this Excel tutorial.
  • Item #2: “Paste”.
    • This makes reference to the Worksheet.Paste method.
  • Item #3: “Destination:=Worksheets(“Example 6 – Copy Picture”).Range(“B5″)”.
    • This is item sets the Destination parameter of the Worksheet.Paste method. This is the destination where the picture within the Clipboard is pasted. In this particular case, this is set by using the Worksheet.Range property to specify cell B5 of the worksheet “Example 6 – Copy Picture”.

The following screenshot shows the results obtained when executing the sample macro #6 (Copy_Picture). Notice how source data is indeed (now) a picture. Check out, for example, the handles that allow you to rotate and resize the image.

Example of results of macro that copies as picture

Excel VBA Copy Paste With The Range.Value And Range.Formula Properties

These methods don’t, strictly speaking, copy and paste the contents of a cell range. However, you may find them helpful if all you want to do is copy and paste the (i) values or (ii) the formulas of particular source range in another destination range.

In fact, if you’re only copying and pasting values or formulas, you probably should be using this way of carrying out the task with Visual Basic for Applications instead of relying on the Range.PasteSpecial method I introduce above. The main reason for this is performance and speed: This strategy tends to result in faster VBA code (than working with the Range.Copy method).

In order to achieve your purposes of copying and pasting values or formulas using this faster method, you’ll be using the Range.Value VBA property or the Range.Formula property (depending on the case).

  • The Range.Value property returns or sets the value of a particular range.
  • The Range.Formula property returns or sets the formula in A1-style notation.

The basic syntax of both properties is similar. In the case of the Range.Value property, this is:

expression.Value(RangeValueDataType)

For the Range.Formula property, the syntax is as follows:

expression.Formula

In both cases, “expression” is a variable representing a Range object.

The only optional parameter of the Range.Value property us RangeValueDataType, which specifies the range value data type by using the values within the xlRangeValueDataType enumeration. However, you can understand how to implement the method I describe here for purposes of copying and pasting values from one range to another without focusing too much on this parameter.

Let’s take a look at how you can use these 2 properties for purposes of copying and pasting values and formulas by checking out some practical examples:

Macro Example #7: Set Value Property Of Destination Range

The following macro (Change_Values) sets the values of cells B5 to M107 of the worksheet “Example 7 – Values” to be equal to the values of cells B5 to M107 of the worksheet “Sample Data”.

Sample macro to copy values

For this way of copying and pasting values to work, the size of the source and destination ranges must be the same. The macro example above complies with this condition. Alternatively, you may want to check out the adjustment at thespreadsheetguru.com (by following the link above), which helps you guarantee that the 2 ranges are the same size.

Let’s take a closer at the VBA code row-by-row look:

Line #1: Worksheets(“Example 7 – Values”).Range(“B5:M107”).Value = Worksheets(“Sample Data”).Range(“B5:M107”).Value

This statement sets the Value property of a certain range (cells B5 to M107 of the “Example 7 – Values” worksheet) to be equal to the Value property of another range (cells B5 to M107 of the “Sample Data” worksheet).

I explain how you can set and read object properties in detail in this Excel tutorial. In this particular case, this is done as follows:

Line #2: Worksheets(“Example 7 – Values”).Columns(“B:M”).AutoFit

This statement is used several times in previous macro examples. I explain it in more detail above.

Its main purpose is to autofit the width of the columns where the cells whose values are set by the macro (the destination cells) are located. In this particular example, those are columns B to M of the “Example 7 – Values” worksheet.

The following screenshot shows the results I get when executing the Change_Values macro.

Result of using macro to change values

The following example, which sets the Formula property of the destination range, is analogous to this one. Let’s take a look at it:

Macro Example #8: Set Formula Property Of Destination Range

As anticipated, the following macro (Change_Formulas) works in a very similar way to the previous example #7. The main difference is that, in this particular case, the purpose of the Sub procedure is to set formulas, instead of values. More precisely, the macro sets the formulas of cells B5 to M107 of the “Example 8 – Formulas” worksheet to be the same as those of cells B5 to M107 of the “Sample Data” worksheet.

Example alternative macro to copy and paste formulas

The basic structure of this macro is virtually identical to that of the Change_Values Sub procedure that appears in macro example #7 above. Just as in that case, the source and destination ranges must be of the same size.

Let’s take, anyway, a quick look at each of the lines of code to ensure that we understand every detail:

Line #1: Worksheets(“Example 8 – Formulas”).Range(“B5:M107”).Formula = Worksheets(“Sample Data”).Range(“B5:M107”).Formula

This statement sets the Formula property of cells B5 to M107 of the “Example 8 – Formulas” worksheet to be equal to the Formula property of cells B5 to M107 of the “Sample Data” worksheet.

The basic structure of the statement is exactly the same to that in the previous macro example #7, with the difference that (now) we’re using the Range.Formula property instead of the Range.Value property. More precisely:

Line #2: Worksheets(“Example 8 – Formulas”).Columns(“B:M”).AutoFit

The purpose of this statement is to autofit the width of the columns where the cells whose formulas have changed are located.

The following screenshot shows the results obtained when executing this macro:

Result of macro that copies and pastes by changing formulas

Notice the following interesting aspects of how the Range.Formula property works:

  • When the cell contains a constant, the Formula property returns a constant. This applies, for example, for (i) the columns that hold the number of units sold, and (ii) the unit prices of Items A, B, C, D and E.
    Excel table with constants set by Formula property
  • If a cell is empty, Range.Formula returns an empty string. In the example we’re looking at, this explains the result in the blank cells between the row specifying unit prices and the main table.
    Result of Excel macro setting formulas from empty cells
  • Finally, if a cell contains a formula, the Range.Formula property returns the formula as a string, and includes the equal sign (=) at the beginning. In the sample worksheet, this explains the results obtained in the cells containing total sales (per item and the grand total).
    Excel table result of macro setting formulas

How To Cancel Cut or Copy Mode and Remove the Moving Border

Several of the VBA methods and macro examples included in this Excel tutorial use the Clipboard.

If you must (or choose to) use the Clipboard when copying and pasting cells or cell ranges with Visual Basic for Applications, you may want to cancel Cut or Copy mode prior to the end of your macros. This removes the moving border around the copied cell range.

The following screenshot shows how this moving border looks like in the case of the “Sample Data” worksheet that includes the source cell range that I’ve used in all of the macro examples within this blog post. Notice the dotted moving outline around the copied cell range:

Example Excel table with dotted moving outline after macro

The VBA statement you need to cancel Cut or Copy mode and remove the moving outline (that appears above) is as follows:

Application.CutCopyMode = False

This statement simply sets the Application.CutCopyMode VBA property to False. Including this statement at the end of a macro has the following 2 consequences:

  • Effect #1: The Cut or Copy mode is cancelled.
  • Effect #2: The moving border is removed.

The following image shows the VBA code of macro example #4 above, with this additional final statement for purposes of cancelling Cut or Copy mode.

Example macro with CutCopyMode property

If I execute this new version of the Copy_Paste sample macro, Excel automatically removes the moving border around the copied cell range in the “Sample Data” worksheet. Notice how, in the following screenshot, the relevant range isn’t surrounded by the moving border:

Example Excel table with Clipboard cleared after macro

Excel VBA Copy Paste: Other VBA Methods You May Want To Explore

The focus of this Excel tutorial is in copying and pasting data in ranges of cells.

You may, however, be interested in learning or exploring about other VBA methods that you can use for pasting other objects or achieve different objectives. If that is the case, perhaps one or more of the methods that I list below may be helpful:

  • The Chart.CopyPicture method, which pastes the selected chart object as a picture.
  • The Chart.Copy method and the Charts.Copy method, whose purpose is to copy chart sheets to another location.
  • The Chart.Paste method, which pastes data into a particular chart.
  • The ChartArea.Copy VBA method, whose purpose is to copy the chart area of a chart to the Clipboard.
  • The ChartObject.Copy method and the ChartObjects.Copy method, which copy embedded charts to the Clipboard.
  • The ChartObject.CopyPicture method and the ChartObjects.CopyPicture VBA method, which you can use to copy embedded charts to the Clipboard as a picture.
  • The Floor.Paste VBA method, which pastes a picture that is within the Clipboard on the floor of a particular chart.
  • The Point.Copy method, which (when a point in a series in a chart has a picture fill), copies the relevant picture to the Clipboard.
  • The Point.Paste method, whose purpose is to paste a picture from the Clipboard as the marker of a particular point in a series in a chart.
  • The Range.CopyFromRecordset method, which copies the contents of a Data Access Object (DAO) or an ActiveX Data Object (ADO) Recordset object to a worksheet.
  • The Series.Copy method, whose purpose is to copy the picture fill of the marker on a series in a chart (if the series has a picture fill).
  • The Series.Paste method, which pastes a picture from the Clipboard as the marker on a particular series in a chart.
  • The SeriesCollection.Paste VBA method, whose purpose is to paste the data on the Clipboard into a chart series collection.
  • The Shape.CopyPicture method, which copies an object to the Clipboard as a picture.
  • The Sheets.Copy method, which copies a sheet to another location.
  • The Slicer.Copy VBA method, whose purpose is to copy a slicer to the Clipboard.
  • The Walls.Paste method, which pastes a picture from the Clipboard on the walls of a chart.
  • The Worksheet.Copy method, which you can use to copy a sheet to another location.
  • The Worksheet.PasteSpecial VBA method, which pastes the contents that are within the Clipboard on the worksheet using a specified format. This particular method is commonly used for purposes of pasting (i) data from other applications, or (ii) pasting data in a particular format.

This list doesn’t include absolutely all the VBA methods that copy and paste objects. It covers (mostly) the methods that apply to some of the main objects you’re likely to work with on a consistent basis, such as charts and worksheets.

Conclusion

By completing this Excel tutorial, you’ve covered the most important VBA methods that you can use for purposes of copying and pasting cells and cell ranges in Excel. More precisely, you’ve read about:

  • The Range.Copy method.
  • The Range.PasteSpecial method.
  • The Worksheet.Paste method.
  • The Range.CopyPicture method.
  • The Range.Value and Range.Formula properties, and how you can use them for purposes of copying values and formulas between cells and cell ranges.

You’ve also seen how to use the Application.CutCopyMode property for purposes of cancelling the Cut or Copy mode, if you decide to use it in your copy-pasting macros.

In addition to covering the basics of each method and property, you’ve seen 8 different examples of VBA code that can be easily adjusted to cover other situations you may encounter.

This Excel VBA Copy Paste Tutorial is accompanied by an Excel workbook containing the data and macros I use in the examples above. You can get immediate free access to this workbook by clicking the button below.

Get immediate free access to the Excel VBA Copy Paste workbook example

Also, remember that you can easily adjust the source and destination cells in any of those macros by adequately qualifying the object references or modifying the range references.

The knowledge and examples you’ve acquired enables you to immediately start creating your own macros for purposes of copying and pasting cells and cell ranges in Excel.

I’m aware that, in some situations, you’ll want to copy and paste other objects (not cell ranges) with VBA. For those purposes, you can refer to the list of similar VBA methods that I’ve not covered in this Excel VBA tutorial.

Содержание

  • Строки и столбцы — вставка против вставки
  • Копировать всю строку
  • Копировать весь столбец
  • Копировать строки или столбцы на другой лист

Это руководство научит вас копировать (или вырезать) целые строки или столбцы с помощью VBA. Мы рассмотрим копирование и вставку диапазонов ячеек в другой статье.

Сначала мы покажем вам, как вставлять или вставлять скопированные строки / столбцы, и обсудим различия. Затем мы покажем вам все различные способы ссылки на строки и столбцы при копировании или вырезании.

Строки и столбцы — вставка против вставки

При вставке строк и столбцов у вас есть два варианта: вы можете вставить существующую строку (или столбец) или вставить новую строку (или столбец).

Давайте посмотрим на разницу …

Копировать и вставить существующую строку / столбец

Это скопирует строку 1 и вставит ее в существующую строку 5:

1 Диапазон («1: 1»). Копировать диапазон («5: 5»)

Это скопирует столбец C и вставит его в столбец E:

1 Диапазон («C: C»). Копировать диапазон («E: E»)

Копировать и вставить строку / столбец

Вместо этого вы можете вставить скопированную строку или столбец и сдвинуть существующие строки или столбцы, чтобы освободить место.

Это скопирует строку 1 и вставит ее в строку 5, сдвинув существующие строки вниз:

12 Диапазон («1: 1»). КопироватьДиапазон («5: 5»). Вставить

Это скопирует столбец C и вставит его в столбец E, сдвинув существующие столбцы вправо:

12 Диапазон («C: C»). КопироватьДиапазон («E: E»). Вставить

Копировать всю строку

Ниже мы покажем вам несколько способов скопировать строку 1 и вставить в строку 5.

1 Диапазон («1: 1»). Копировать диапазон («5: 5»)
1 Диапазон («A1»). Диапазон всей строки. Копия («A5»)
1 Ряды (1) Копировать ряды (5)

Вырезать и вставить строки

Просто используйте Вырезать вместо Копировать, чтобы вырезать и вставить строки:

1 Ряды (1) Вырезать ряды (5)

Копировать несколько строк

Вот примеры одновременного копирования нескольких строк:

1 Диапазон («5: 7»). Копировать диапазон («10:13»)
1 Диапазон («A5: A7»). Диапазон всей строки.Копия («A10: A13»)
1 Ряды (5: 7) Копировать ряды (10:13)

Копировать весь столбец

Вы можете копировать целые столбцы аналогично копированию целых строк:

1 Диапазон («C: C»). Копировать диапазон («E: E»)
1 Диапазон («C1»). Целый столбец.Копировать Диапазон («C1»). Целый столбец
1 Столбцы (3). Диапазон копирования (5)

Вырезать и вставить столбцы

Просто используйте Вырезать вместо Копировать, чтобы вырезать и вставить столбцы:

1 Диапазон («C: C»). Диапазон обрезки («E: E»)

Копировать несколько столбцов

Вот примеры одновременного копирования нескольких столбцов:

1 Диапазон («C: E»). Копировать диапазон («G: I»)
1 Диапазон («C1: E1»). Целый столбец.Копировать Диапазон («G1: I1»)
1 Столбцы (3: 5). Копировать столбцы (7: 9)

Копировать строки или столбцы на другой лист

Чтобы скопировать на другой лист, просто используйте объект листа:

1 Листы («sheet1»). Диапазон («C: E»). Копировать листы («sheet2»). Диапазон («G: I»)

Вырезать строки или столбцы на другой лист

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

1 Листы («sheet1»). Диапазон («C: E»). Отдельные листы («sheet2»). Диапазон («G: I»)

Вы поможете развитию сайта, поделившись страницей с друзьями

Like this post? Please share to your friends:
  • Как в excel копировать строки при условии
  • Как в excel копировать содержимое ячейки а не формулу
  • Как в excel копировать результат а не формулу
  • Как в excel копировать размеры ячеек
  • Как в excel макрос для цветов