Содержание
- Sheets.Copy method (Excel)
- Syntax
- Parameters
- Remarks
- Example
- Support and feedback
- Метод Worksheet.Copy (Excel)
- Синтаксис
- Параметры
- Замечания
- Пример
- Поддержка и обратная связь
- VBA Excel. Копирование данных с одного листа на другой
- Условие задачи по копированию данных
- Решение копированием с листа на лист
- Решение с использованием массивов
- 6 комментариев для “VBA Excel. Копирование данных с одного листа на другой”
- VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)
- Метод Range.Cut
- Синтаксис
- Параметры
- Метод Range.Copy
- Синтаксис
- Параметры
- Метод Worksheet.Paste
- Синтаксис
- Параметры
- Примеры
- 43 комментария для “VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)”
- Sheets.Copy method (Excel)
- Syntax
- Parameters
- Remarks
- Example
- Support and feedback
Sheets.Copy method (Excel)
Copies the sheet to another location in the workbook.
Syntax
expression.Copy (Before, After)
expression A variable that represents a Sheets object.
Parameters
Name | Required/Optional | Data type | Description |
---|---|---|---|
Before | Optional | Variant | The sheet before which the copied sheet will be placed. You cannot specify Before if you specify After. |
After | Optional | Variant | The sheet after which the copied sheet will be placed. You cannot specify After if you specify Before. |
If you don’t specify either Before or After, Microsoft Excel creates a new workbook that contains the copied sheet.
Example
This example copies Sheet1, placing the copy after Sheet3.
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
Метод Worksheet.Copy (Excel)
Копирует лист в другое место в текущей или новой книге.
Синтаксис
expression. Копирование (до, после)
Выражение Переменная, представляющая объект Worksheet .
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Before | Необязательный | Variant | Лист, перед которым будет размещен скопированный лист. Невозможно указать параметр Before , если указать After. |
After | Необязательный | Variant | Лист, после которого будет размещен скопированный лист. Вы не можете указать After , если укажем значение До. |
Замечания
Если не указать значение «До» или «После», Microsoft Excel создает новую книгу, содержащую скопированный объект Worksheet . Только что созданная книга содержит свойство Application.ActiveWorkbook и содержит один лист. На одном листе сохраняются свойства Name и CodeName исходного листа. Если скопированный лист содержал лист кода листа в проекте VBA, он также переносится в новую книгу.
Выбор массива из нескольких листов можно скопировать в новый пустой объект Workbook аналогичным образом.
Источник и назначение должны находиться в одном экземпляре Excel.Application. В противном случае возникает ошибка среды выполнения 1004: не поддерживается такой интерфейс, если использовался что-то подобное Sheet1.Copy objWb.Sheets(1) , или ошибка среды выполнения 1004: сбой метода копирования класса Worksheet, если использовалось что-то подобное ThisWorkbook.Worksheets(«Sheet1»).Copy objWb.Sheets(1) .
Пример
В этом примере выполняется копирование Sheet1, помещая его после Sheet3.
В этом примере сначала файл Sheet1 копируется в новую пустую книгу, а затем сохраняет и закрывает новую книгу.
В этом примере листы Sheet1, Sheet2 и Sheet4 копируются в новую пустую книгу, а затем сохраняются и закрываются.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
VBA Excel. Копирование данных с одного листа на другой
Решение задачи по копированию данных с одного листа на другой без использования и с использованием массивов. Вызов из кода VBA Excel других процедур.
Условие задачи по копированию данных
На одном листе расположен список повторяющихся городов с информацией о предприятиях общепита:
Исходная таблица задания №1
Необходимо данные по каждому городу перенести в одну строку на другом листе (таблица обрезана справа):
Часть результирующего списка задания №1
Решение копированием с листа на лист
Это решение значительно проще, чем с использованием массивов, но более медленное. При больших объемах информации обработка может длиться достаточно долго. Решение достигается путем присваивания значений ячеек из таблицы первого листа ячейкам второго листа.
Переменные:
- n1 – количество строк в исходной таблице;
- n2 – номер столбца текущей ячейки исходной таблицы, к которой обращается цикл;
- n3 – номер строки текущей ячейки на втором листе;
- n4 – номер столбца текущей ячейки на втором листе;
- i1 – счетчик цикла For… Next;
- gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.
Решение с использованием массивов
Циклы в массивах работают очень быстро, но решение с ними может быть сложнее, чем при простом присваивании значений одних ячеек другим. В этом примере для упрощения кода две процедуры записаны отдельно и в нужные моменты вызываются для исполнения.
Подпрограммы Kopirovanie и Vstavka используются в цикле For. Next процедуры Resheniye2 по два раза, поэтому их коды вынесены за пределы процедуры Resheniye2 и вызываются по мере необходимости.
Переменные:
- massiv1 – его элементам присваиваются значения ячеек исходной таблицы;
- massiv2 – одномерный массив, заполняемый данными из переменной txt1;
- massiv3 – двумерный массив, заполняемый данными из одномерного массива massiv2 и используемый для вставки очередной строки на второй лист;
- txt1 – сюда копируются через разделитель значения элементов массива massiv1, предназначенные для заполнения очередной строки на втором листе;
- n1 – количество строк в исходной таблице;
- n2 – количество столбцов в исходной таблице;
- n3 – номер текущей строки на втором листе;
- n4 – количество столбцов текущей строки на втором листе (соответствует количеству элементов массива massiv2);
- i1, i2, i3 – счетчики цикла For… Next;
- gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.
Переменные, использующиеся более чем в одной процедуре, объявлены как глобальные в разделе Declarations программного модуля.
6 комментариев для “VBA Excel. Копирование данных с одного листа на другой”
Классно! Авторам — уважение! Толково, без соплей, со знанием дела.
Можете подсказать синтаксис такой проблемы: таблица 10 строк, 8 столбцов, если первая ячейка не пустая, скопировать на другой лист этой книги, а лучше — в отдельную книгу всю строку таблицы. Потом то же самое со строкой ниже, и так до последней. Потом пустые строки надо скрыть.
Это сложно?
Заранее спасибо за ответ.
Привет, Илья!
Для диапазона A1:H10:
Здравствуйте, Евгений! Огромное Вам спасибо! Потраченное время и желание помочь дорогого стОит, это большая редкость в наше время, поверьте. Ваш макрос — не совсем то, что мне нужно (например, новую книгу открывать не нужно, она уже есть, нужно просто на неё (и нужный лист) сослаться). Месторасположение ячеек в книгах не совпадает, строки тоже (27-я строка первой книги вставляется в 6-ю второй, т.е., например D27 в E6). И самое главное — вторая книга заполняется с нарастающим итогом. Т.е с первой книги берутся данные, вносятся во вторую, потом первая заполняется по новой, эти данные вносятся во вторую, но уже ниже и т.д.
Но, в любом случае, огромное спасибо, Вы дали направление, куда двигаться, буду думать ):
Добрый день, Евгений!
Существует способ автоматической передачи (копирования) данных из одного файла эксель в другой методом =…
А метод автоматической передачи (копирования) цвета имеется?
Подскажите пожалуйста!
Источник
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, но строки на нем не удаляет, циклы пошагово проходят, но ничего не изменяется.)
Источник
Sheets.Copy method (Excel)
Copies the sheet to another location in the workbook.
Syntax
expression.Copy (Before, After)
expression A variable that represents a Sheets object.
Parameters
Name | Required/Optional | Data type | Description |
---|---|---|---|
Before | Optional | Variant | The sheet before which the copied sheet will be placed. You cannot specify Before if you specify After. |
After | Optional | Variant | The sheet after which the copied sheet will be placed. You cannot specify After if you specify Before. |
If you don’t specify either Before or After, Microsoft Excel creates a new workbook that contains the copied sheet.
Example
This example copies Sheet1, placing the copy after Sheet3.
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
tod2020 Пользователь Сообщений: 261 |
Есть умная таблица Table1 Изменено: tod2020 — 24.06.2017 23:10:31 |
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
#2 24.06.2017 22:52:49
<#0> |
||
tod2020 Пользователь Сообщений: 261 |
|
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
#4 24.06.2017 23:06:01
<#0> |
||
tod2020 Пользователь Сообщений: 261 |
спасибо Изменено: tod2020 — 24.06.2017 23:21:08 |
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
#6 24.06.2017 23:18:02
Вот, и ладненько. А на остальное я пойтить не могу. <#0> |
||
tod2020 Пользователь Сообщений: 261 |
JayBhagavan, Как в Range(«E10») задать цифрами координату в виде (10,5) ? Изменено: tod2020 — 26.06.2017 19:33:17 |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
|
tod2020 Пользователь Сообщений: 261 |
#9 26.06.2017 19:58:00
так нельзя, потомучто миниму вторая ячейка нужна
Выдает ошибку при копирован умной таблицы в эту ячейку Изменено: tod2020 — 26.06.2017 19:58:37 |
||||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#10 26.06.2017 20:06:34
А Вам так никто и не предлагал
Может потому что пробел перед скобкой лишний? Что за ошибка-то? Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
#11 26.06.2017 20:09:03
А вот так, как Вы написали (с Range) действительно нельзя. |
||
tod2020 Пользователь Сообщений: 261 |
#12 26.06.2017 20:26:16 Да какого ?!!! Я же так делал и не принимал и ошибку выдавал. что за фигня
КОРОЧЕ: ТАК ТОЖЕ РАБОТАЕТ Изменено: tod2020 — 26.06.2017 20:26:46 |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
Короче. У меня работает. Что там не работает у Вас — непонятно, ведь текст ошибки Вам лень написать. И пробел перед скобками(после Cells) как был — так и остался. У Вас и в коде так же или Вы специально для нас его вставляете в код? Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
tod2020 Пользователь Сообщений: 261 |
Я прописал в редакторе и ровно это благополучие скопировал из редактора Изменено: tod2020 — 26.06.2017 20:41:30 |
tod2020 Пользователь Сообщений: 261 |
|
tod2020 Пользователь Сообщений: 261 |
#16 27.06.2017 17:32:10 Решил в Range задать вместо конкретного имени переменную с именем умной таблицы
но выдает ошибку из-за того что в скобках Range не верно сформулировано Изменено: tod2020 — 27.06.2017 17:32:38 |
||
RAN Пользователь Сообщений: 7091 |
#17 27.06.2017 17:41:55
ну, или
Изменено: RAN — 27.06.2017 17:45:28 |
||||
Sub ExcelRangeToWord()
‘PURPOSE: Copy/Paste An Excel Table Into a New Word Document
‘NOTE: Must have Word Object Library Active in Order to Run _
(VBE > Tools > References > Microsoft Word 12.0 Object Library)
‘SOURCE: www.TheSpreadsheetGuru.com
Dim tbl As Excel.Range
Dim WordApp As Word.Application
Dim myDoc As Word.Document
Dim WordTable As Word.Table
‘Optimize Code
Application.ScreenUpdating = False
Application.EnableEvents = False
‘Copy Range from Excel
Set tbl = ThisWorkbook.Worksheets(Sheet1.Name).ListObjects(«Table1»).Range
‘Create an Instance of MS Word
On Error Resume Next
‘Is MS Word already opened?
Set WordApp = GetObject(class:=»Word.Application»)
‘Clear the error between errors
Err.Clear
‘If MS Word is not already open then open MS Word
If WordApp Is Nothing Then Set WordApp = CreateObject(class:=»Word.Application»)
‘Handle if the Word Application is not found
If Err.Number = 429 Then
MsgBox «Microsoft Word could not be found, aborting.»
GoTo EndRoutine
End If
On Error GoTo 0
‘Make MS Word Visible and Active
WordApp.Visible = True
WordApp.Activate
‘Create a New Document
Set myDoc = WordApp.Documents.Add
‘Copy Excel Table Range
tbl.Copy
‘Paste Table into MS Word
myDoc.Paragraphs(1).Range.PasteExcelTable _
LinkedToExcel:=False, _
WordFormatting:=False, _
RTF:=False
‘Autofit Table so it fits inside Word Document
Set WordTable = myDoc.Tables(1)
WordTable.AutoFitBehavior (wdAutoFitWindow)
EndRoutine:
‘Optimize Code
Application.ScreenUpdating = True
Application.EnableEvents = True
‘Clear The Clipboard
Application.CutCopyMode = False
End Sub
In this part of the code we are determining if Microsoft Word is open or not. If Word is already open, we can set a variable equal to the entire program by using GetObject. If MS Word is not currently running we can use CreateObject to run an instance of Word and then set a variable equal to that specific instance of MS Word.
When using CreateObject, the target application will start running but it is not visible on screen. Therefore we need to turn the Visible setting on (equal to true). Also, VBA with Word is a little bit different than with Excel in that it is much more dependent on its window showing on screen. Therefore a second command must be written to Activate Microsoft Word.
Copy From Excel, Paste Onto Document
Now that you have a new document created, you can command Excel to paste your table into MS Word. Near the beginning of the code, there was a line that allowed you to specify the exact table you wanted to copy. The variable tbl was used to remember this table range and to allow you to reference the range later on in the code.
Guru Tip: It is a good idea to place code that may need to be manually changed at some point in the future near the beginning of the subroutine. This prevents you from having to scroll through your code and pinpoint the exact place where you spelled out which range you wanted to copy or which worksheet you wanted to pull data from. This can save you a bunch of time and prevent confusion!
Word has a special method called PasteExcelTable, which (as you can guess) allows you paste in an Excel table. There are three variables you can tweak to get you table looking and functioning just the way you want.
-
LinkedToExcel — True links the pasted table to the original Excel file so that changes made to the Excel file are reflected in Microsoft Word.
-
WordFormatting — True formats the table using the formatting in the Word document. False formats the table according to the original Excel file.
-
RTF — True pastes the Excel table using Rich Text Format (RTF). False pastes the Excel table as HTML.
Now for the last step! Depending on how large your table is, it may be spilling outside of your document page. In order to prevent this from happening you can go ahead and use AutoFitBehavior to resize the table to fit perfectly inside your Word document.
About The Author
Hey there! I’m Chris and I run TheSpreadsheetGuru website in my spare time. By day, I’m actually a finance professional who relies on Microsoft Excel quite heavily in the corporate world. I love taking the things I learn in the “real world” and sharing them with everyone here on this site so that you too can become a spreadsheet guru at your company.
Through my years in the corporate world, I’ve been able to pick up on opportunities to make working with Excel better and have built a variety of Excel add-ins, from inserting tickmark symbols to automating copy/pasting from Excel to PowerPoint. If you’d like to keep up to date with the latest Excel news and directly get emailed the most meaningful Excel tips I’ve learned over the years, you can sign up for my free newsletters. I hope I was able to provide you with some value today and I hope to see you back here soon!
— Chris
Founder, TheSpreadsheetGuru.com
Вырезание, перемещение, копирование и вставка ячеек (диапазонов) в 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») |
Дублирование таблицы на другой лист нужных столбцов |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |