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

Вырезание, перемещение, копирование и вставка ячеек (диапазонов) в 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»)


 

Grantorino

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

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

#1

24.08.2020 15:40:19

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

Код
Sub Макрос1()

    Range("Таблица1[[#All],[Материал]]").Select
    Selection.Copy
    Sheets.Add After:=ActiveSheet
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

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

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

  • Test macros.xlsm (14.48 КБ)

Изменено: Grantorino24.08.2020 15:51:49

 

Mershik

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

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

Grantorino, а что вы хотите скопировать енсмежное?

Изменено: Mershik24.08.2020 15:43:12

Не бойтесь совершенства. Вам его не достичь.

 

Grantorino

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

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

Mershik,например столбец материал и столбец стоимость

 

New

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

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

#4

24.08.2020 15:57:52

Код
Sub test()
    Range("A:A,C:C").Copy
    Sheets.Add After:=ActiveSheet
    Range("A1").Select
    ActiveSheet.Paste
End Sub
 

Grantorino

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

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

New, спасибо, но мне необходимо скопировать не весь столбец, а столбец таблицы

 

New

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

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

А какая разница, если вы на пустой лист будете вставлять данные? )

 

Aleksey1107

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

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

Excel 365

#7

24.08.2020 16:01:30

Grantorino,добрый день.
замените 3 строку вашего кода, на эту

Код
Range("Таблица1[Материал],Таблица1[Стоимость]").Select
 

New

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

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

#8

24.08.2020 16:05:03

Код
Sub test()
Dim LastRow As Long
    
    With Worksheets("Лист1")
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        Union(Range("A1:A" & LastRow), Range("C1:C" & LastRow)).Copy
    End With
    Sheets.Add After:=ActiveSheet
    Range("A1").PasteSpecial Paste:=xlPasteValues
End Sub

вариант 2, но копируется без шапки таблицы

Код
Sub Макрос1()
    Range("Таблица1[Материал],Таблица1[Стоимость]").Copy
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Paste
End Sub

вот ещё вариант вам

Код
Sub test()
Dim LastRow As Long, Rng As Range
    
    With Worksheets("Лист1")
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        Set Rng = Union(Range("A1:A" & LastRow), Range("C1:C" & LastRow))
    End With
    Sheets.Add After:=ActiveSheet
    Rng.Copy Range("A1")
End Sub

Изменено: New24.08.2020 16:10:32

 

Grantorino

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

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

#9

24.08.2020 16:17:01

Всем большое спасибо!
и второй вопрос на который пока не услышал и не знаю ответ, если таблица большая, то как лучше

Код
Sub test()
Dim LastRow As Long, Rng As Range
     
    With Worksheets("Лист1")
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        Set Rng = Union(Range("A1:A" & LastRow), Range("C1:C" & LastRow))
    End With
    Sheets.Add After:=ActiveSheet
    Rng.Copy Range("A1")
End Sub

или так:

Код
Sub Макрос1()
    Range("Таблица1[Материал],Таблица1[Стоимость]").Copy
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Paste
End Sub
 

New

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

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

моё мнение — разницы нет.

Изменено: New24.08.2020 16:27:50

 

Aleksey1107

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

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

Excel 365

#11

24.08.2020 16:27:12

Цитата
New написал:
вариант 2, но копируется без шапки таблицы

Нет, но отличие все же есть от моего в #7 :D
С шапкой))

Код
Sub Макрос1()
    Range("Таблица1[[#All],[Материал]],Таблица1[[#All],[Стоимость]]").Select
    Selection.Copy
    Sheets.Add After:=ActiveSheet
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub
 

New

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

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

#12

24.08.2020 16:29:27

Цитата
Aleksey1107 написал:
Нет, но отличие все же есть от моего в #7

я ваш вариант и взял за основу))

 

Grantorino

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

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

При использовании макроса, возник впорос, как сделать чтобы указанный порядок в макросе учитывался, если мне надо сначала столбец стоимость вставить встолбец А на листе 2, а Материал в столбец B ? почему-то макрос вставляет в исходном порядке, вне зависимости как я перечисляю столбцы в макросе/

И еще прошу помощи, при копировании более 8ми столбцов выдает ошибку method range of object global faied.. необходимо разбить на несколько частей процесс копирования?

Изменено: Grantorino25.08.2020 11:11:56

 

New

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

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

#14

25.08.2020 11:29:59

Да, копируйте каждый столбец отдельно в нужном порядке

Содержание

  1. Способы VBA работы с ячейками Excel
  2. Копировать и вставить: наиболее распространенное действие Excel
  3. Вставить данные ниже последней заполненной строки
  4. Метод Range.Copy (Excel)
  5. Синтаксис
  6. Параметры
  7. Возвращаемое значение
  8. Пример
  9. Поддержка и обратная связь
  10. Excel макрос копирования столбца
  11. VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)
  12. Метод Range.Cut
  13. Синтаксис
  14. Параметры
  15. Метод Range.Copy
  16. Синтаксис
  17. Параметры
  18. Метод Worksheet.Paste
  19. Синтаксис
  20. Параметры
  21. Примеры
  22. 43 комментария для “VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)”
  23. VBA Excel. Метод Range.Insert (вставка со сдвигом ячеек)
  24. Метод Range.Insert
  25. Синтаксис
  26. Параметры
  27. Примеры
  28. Простая вставка диапазона
  29. Вставка вырезанного диапазона
  30. Вставка скопированного диапазона
  31. Вставка и перемещение строк

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Метод 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 и обратная связь.

Источник

Excel макрос копирования столбца

Доброго всем времени суток! Я только пытаюсь разобраться с VBA и столкнулся с очень проблемным вопросом (для меня). Суть вопроса% нужен макрос который копировал данные столбца и переносил их на другой лист, но есть условие: он должен копировать данные до последней ячейки (так как данные будут в последствие добавлять)
к Примеру нужно скопировать с list1 столбец В до последней заполненной строки и вставить данные на list2 и так далее

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub ()
Application.ScreenUpdating = False
Application.CutCopyMode = False
iLastA = Worksheets(«List2»).Cells(Rows.Count, 1).End(xlUp).Row + 1
iLastB = Worksheets(«List2»).Cells(Rows.Count, 2).End(xlUp).Row + 1
iLastC = Worksheets(«List2»).Cells(Rows.Count, 3).End(xlUp).Row + 1

Worksheets(«List1»).Range(«B1:B39»).Copy
Worksheets(«List2»).Range(«A» & iLastA).PasteSpecial xlValue
Worksheets(«List1»).Range(«C1:C39»).Copy
Worksheets(«List2»).Range(«B» & iLastB).PasteSpecial xlValue
Worksheets(«List1»).Range(«I1:I39»).Copy
Worksheets(«List2»).Range(«C» & iLastC).PasteSpecial xlValue
Application.CutCopyMode = True
Application.ScreenUpdating = True
End Sub

Доброго всем времени суток! Я только пытаюсь разобраться с VBA и столкнулся с очень проблемным вопросом (для меня). Суть вопроса% нужен макрос который копировал данные столбца и переносил их на другой лист, но есть условие: он должен копировать данные до последней ячейки (так как данные будут в последствие добавлять)
к Примеру нужно скопировать с list1 столбец В до последней заполненной строки и вставить данные на list2 и так далее

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub ()
Application.ScreenUpdating = False
Application.CutCopyMode = False
iLastA = Worksheets(«List2»).Cells(Rows.Count, 1).End(xlUp).Row + 1
iLastB = Worksheets(«List2»).Cells(Rows.Count, 2).End(xlUp).Row + 1
iLastC = Worksheets(«List2»).Cells(Rows.Count, 3).End(xlUp).Row + 1

Worksheets(«List1»).Range(«B1:B39»).Copy
Worksheets(«List2»).Range(«A» & iLastA).PasteSpecial xlValue
Worksheets(«List1»).Range(«C1:C39»).Copy
Worksheets(«List2»).Range(«B» & iLastB).PasteSpecial xlValue
Worksheets(«List1»).Range(«I1:I39»).Copy
Worksheets(«List2»).Range(«C» & iLastC).PasteSpecial xlValue
Application.CutCopyMode = True
Application.ScreenUpdating = True
End Sub

Сообщение Доброго всем времени суток! Я только пытаюсь разобраться с VBA и столкнулся с очень проблемным вопросом (для меня). Суть вопроса% нужен макрос который копировал данные столбца и переносил их на другой лист, но есть условие: он должен копировать данные до последней ячейки (так как данные будут в последствие добавлять)
к Примеру нужно скопировать с list1 столбец В до последней заполненной строки и вставить данные на list2 и так далее

Источник

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. Метод Range.Insert (вставка со сдвигом ячеек)

Вставка диапазона со сдвигом ячеек вправо или вниз методом Insert объекта Range. Вставка и перемещение строк и столбцов из кода VBA Excel. Примеры.

Метод Range.Insert

Синтаксис

Expression – выражение (переменная), возвращающее объект Range.

Параметры

Параметр Описание Значения
Shift Необязательный параметр. Определяет направление сдвига ячеек. Если параметр Shift опущен, направление выбирается в зависимости от формы* диапазона. xlShiftDown (-4121) – ячейки сдвигаются вниз;
xlShiftToRight (-4161) – ячейки сдвигаются вправо.
CopyOrigin Необязательный параметр. Определяет: из каких ячеек копировать формат. По умолчанию формат копируется из ячеек сверху или слева. xlFormatFromLeftOrAbove (0) – формат копируется из ячеек сверху или слева;
xlFormatFromRightOrBelow (1) – формат копируется из ячеек снизу или справа.

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

Примеры

Простая вставка диапазона

Вставка диапазона ячеек в диапазон «F5:K9» со сдвигом исходных ячеек вправо:

Если бы параметр Shift не был указан, сдвиг ячеек, по умолчанию, произошел бы вниз, так как диапазон горизонтальный.

Вставка вырезанного диапазона

Вставка диапазона, вырезанного в буфер обмена методом Range.Cut, из буфера обмена со сдвигом ячеек по умолчанию:

Вставка скопированного диапазона

Вставка диапазона, скопированного в буфер обмена методом Range.Copy, из буфера обмена со сдвигом ячеек по умолчанию:

Вставка и перемещение строк

Вставка одной строки на место пятой строки со сдвигом исходной строки вниз:

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

Вставка строк с использованием переменных, указывающих над какой строкой осуществить вставку и количество вставляемых строк:

Источник

This is my first attempt to write VBA code. I am mimicking something I found on stackoverflow.

I want to copy certain columns (A, B and E) from one workbook to another and also change the font and color of certain Rows and edit the text in certain cells (replace a long phrase with the word «Group»).

This is the code I copied without change:

Sub CopyColumnToWorkbook()
Dim sourceColumn As Range, targetColumn As Range

Set sourceColumn = Workbooks("Source").Worksheets("Sheet1").Columns("A")
Set targetColumn = Workbooks("Target").Worksheets("Sheet1").Columns("A")

sourceColumn.Copy Destination:=targetColumn
End Sub

I get a runtime error 9 and the line below is highlighted:

Set sourceColumn = Workbooks("Source").Worksheets("Sheet1").Columns("A")

I am attaching the Source and Target files below as I hope they would look like at the end of a successful run.

Source File

Target File

Community's user avatar

asked Dec 6, 2012 at 23:54

Amatya's user avatar

1

You reference a sheet that is not there. Change it to reference the first sheet in the workbook by using its index. You also did not include the extension to the file so it would fail on the workbook object as well.

Sub CopyColumnToWorkbook()
Dim sourceColumn As Range, targetColumn As Range

Set sourceColumn = Workbooks("Source.xlsm").Worksheets(1).Columns("A")
Set targetColumn = Workbooks("Target.xlsm").Worksheets(1).Columns("A")

sourceColumn.Copy Destination:=targetColumn
End Sub

answered Dec 7, 2012 at 0:26

Sorceri's user avatar

SorceriSorceri

7,8101 gold badge28 silver badges38 bronze badges

5

@davidtaillefer First of all, tho part of the code where you determine to target cell is not correct.

Range("b" & LastColumn + 1 & LastRow + 1)

Suppose LastColumn = 26 and LastRow =153, the above line of code translates to «B» & 26+1 & 153+1, which results in a cell reference «B27154»

I believe the following piece of code does what you want. It copies values and formats from the first sheet into the next empty column in the second sheet from row 4. If B4 in the second sheet is empty (like the very first time you perform the copy/paste operation to an empty sheet) it will start in in B4.

Sub copycolumns()

Dim TargetSheet As Object
Set TargetSheet = Sheets("Productivity Weekly")

Dim TargetColumn As Integer

TargetColumn = TargetSheet.Range("B4").CurrentRegion.Columns.Count + 2

If TargetSheet.Range("B4") = "" Then
    TargetColumn = 2
End If

Sheets("Assignments").Range("C18:j167").Copy

TargetSheet.Activate
TargetSheet.Cells(4, TargetColumn).Select

Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
        , SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
Application.CutCopyMode = False


End Sub

 Not the most elegant piece of programming, but it works for the task you want to perform.

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")

I’m trying to write a macro that copies the content of column 1 from sheet 1 to column 2 on sheet 2. This is how the module looks like but, when I run it, I get

Run time error 9, Subscript out of range.

Sub OneCell()
    Sheets("Sheet1").Select
    'select column 1 A1'
    Range("A1:A3").Select

    Selection.Copy
    Range("B1:B3").Select

    ActiveSheet.Paste

    Sheets("Sheet2").Select
    Application.CutCopyMode = False
End Sub

ZygD's user avatar

ZygD

21k39 gold badges77 silver badges98 bronze badges

asked Jan 2, 2010 at 4:38

excel34's user avatar

The following works fine for me in Excel 2007.
It is simple, and performs a full copy (retains all formatting, etc.):

Sheets("Sheet1").Columns(1).Copy Destination:=Sheets("Sheet2").Columns(2)

«Columns» returns a Range object, and so this is utilizing the «Range.Copy» method. «Destination» is an option to this method — if not provided the default is to copy to the paste buffer. But when provided, it is an easy way to copy.

As when manually copying items in Excel, the size and geometry of the destination must support the range being copied.

answered Dec 18, 2012 at 1:19

David's user avatar

DavidDavid

5455 silver badges13 bronze badges

Selecting is often unnecessary. Try this

Sub OneCell()
    Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub

answered Jan 2, 2010 at 21:12

guitarthrower's user avatar

guitarthrowerguitarthrower

5,6043 gold badges28 silver badges37 bronze badges

4

If you have merged cells,

Sub OneCell()
    Sheets("Sheet2").range("B1:B3").value = Sheets("Sheet1").range("A1:A3").value
End Sub

that doesn’t copy cells as they are, where previous code does copy exactly as they look like (merged).

Basic's user avatar

Basic

26.1k24 gold badges112 silver badges197 bronze badges

answered Feb 9, 2012 at 14:38

Lucy's user avatar

LucyLucy

212 bronze badges

I’m not sure why you’d be getting subscript out of range unless your sheets weren’t actually called Sheet1 or Sheet2. When I rename my Sheet2 to Sheet_2, I get that same problem.

In addition, some of your code seems the wrong way about (you paste before selecting the second sheet). This code works fine for me.

Sub OneCell()
    Sheets("Sheet1").Select
    Range("A1:A3").Copy
    Sheets("Sheet2").Select
    Range("b1:b3").Select
    ActiveSheet.Paste
End Sub

If you don’t want to know about what the sheets are called, you can use integer indexes as follows:

Sub OneCell()
    Sheets(1).Select
    Range("A1:A3").Copy
    Sheets(2).Select
    Range("b1:b3").Select
    ActiveSheet.Paste
End Sub

answered Jan 2, 2010 at 4:46

paxdiablo's user avatar

paxdiablopaxdiablo

844k233 gold badges1565 silver badges1937 bronze badges

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rng As Range, r As Range
  Set rng = Intersect(Target, Range("a2:a" & Rows.Count))
  If rng Is Nothing Then Exit Sub
    For Each r In rng
      If Not IsEmpty(r.Value) Then
        r.Copy Destination:=Sheets("sheet2").Range("a2")
      End If
    Next
  Set rng = Nothing
End Sub

Juan Mellado's user avatar

Juan Mellado

15k5 gold badges47 silver badges54 bronze badges

answered Mar 17, 2012 at 16:58

Ravi's user avatar

1

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

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

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии