Вырезание, перемещение, копирование и вставка ячеек (диапазонов) в 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 |
#1 24.08.2020 15:40:19 Добрый день, подскажите, хочу скопировать несколько не смежных столбцов таблицы (вместе с заголовками) на новый лист макросом, для одного столбца макрос осилил:
а для нескольких не смежных — не получается. И как лучше для большего массива, копировать не смежные столбцы с использованием имен столбцов или без них (через определение диапазона)? Прикрепленные файлы
Изменено: Grantorino — 24.08.2020 15:51:49 |
||
Mershik Пользователь Сообщений: 8277 |
Grantorino, а что вы хотите скопировать енсмежное? Изменено: Mershik — 24.08.2020 15:43:12 Не бойтесь совершенства. Вам его не достичь. |
Grantorino Пользователь Сообщений: 40 |
Mershik,например столбец материал и столбец стоимость |
New Пользователь Сообщений: 4582 |
#4 24.08.2020 15:57:52
|
||
Grantorino Пользователь Сообщений: 40 |
New, спасибо, но мне необходимо скопировать не весь столбец, а столбец таблицы |
New Пользователь Сообщений: 4582 |
А какая разница, если вы на пустой лист будете вставлять данные? ) |
Aleksey1107 Пользователь Сообщений: 363 Excel 365 |
#7 24.08.2020 16:01:30 Grantorino,добрый день.
|
||
New Пользователь Сообщений: 4582 |
#8 24.08.2020 16:05:03
вариант 2, но копируется без шапки таблицы
вот ещё вариант вам
Изменено: New — 24.08.2020 16:10:32 |
||||||
Grantorino Пользователь Сообщений: 40 |
#9 24.08.2020 16:17:01 Всем большое спасибо!
или так:
|
||||
New Пользователь Сообщений: 4582 |
моё мнение — разницы нет. Изменено: New — 24.08.2020 16:27:50 |
Aleksey1107 Пользователь Сообщений: 363 Excel 365 |
#11 24.08.2020 16:27:12
Нет, но отличие все же есть от моего в #7
|
||||
New Пользователь Сообщений: 4582 |
#12 24.08.2020 16:29:27
я ваш вариант и взял за основу)) |
||
Grantorino Пользователь Сообщений: 40 |
При использовании макроса, возник впорос, как сделать чтобы указанный порядок в макросе учитывался, если мне надо сначала столбец стоимость вставить встолбец А на листе 2, а Материал в столбец B ? почему-то макрос вставляет в исходном порядке, вне зависимости как я перечисляю столбцы в макросе/ И еще прошу помощи, при копировании более 8ми столбцов выдает ошибку method range of object global faied.. необходимо разбить на несколько частей процесс копирования? Изменено: Grantorino — 25.08.2020 11:11:56 |
New Пользователь Сообщений: 4582 |
#14 25.08.2020 11:29:59 Да, копируйте каждый столбец отдельно в нужном порядке |
Содержание
- Способы VBA работы с ячейками Excel
- Копировать и вставить: наиболее распространенное действие Excel
- Вставить данные ниже последней заполненной строки
- Метод Range.Copy (Excel)
- Синтаксис
- Параметры
- Возвращаемое значение
- Пример
- Поддержка и обратная связь
- Excel макрос копирования столбца
- VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)
- Метод Range.Cut
- Синтаксис
- Параметры
- Метод Range.Copy
- Синтаксис
- Параметры
- Метод Worksheet.Paste
- Синтаксис
- Параметры
- Примеры
- 43 комментария для “VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)”
- VBA Excel. Метод Range.Insert (вставка со сдвигом ячеек)
- Метод Range.Insert
- Синтаксис
- Параметры
- Примеры
- Простая вставка диапазона
- Вставка вырезанного диапазона
- Вставка скопированного диапазона
- Вставка и перемещение строк
Способы 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
asked Dec 6, 2012 at 23:54
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
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…
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!
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
21k39 gold badges77 silver badges98 bronze badges
asked Jan 2, 2010 at 4:38
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
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
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
26.1k24 gold badges112 silver badges197 bronze badges
answered Feb 9, 2012 at 14:38
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
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
15k5 gold badges47 silver badges54 bronze badges
answered Mar 17, 2012 at 16:58
1