excel – VBA Копирование диапазона и вставка на другой лист – Question-It.com

Способы VBA работы с ячейками Excel читать статью на сайте ExcelPedia. Ознакомиться с руководством копирования ячеек с помощью VBA макроса с описанием на сайте.

Синтаксис

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

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

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

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

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

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

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

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

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

Sub Примеры_копирования_диапазона()’Используйте метод Range.Copy для простого копирования / вставки ‘Метод Range.Copy – копирование и вставка с 1 строкой Range(“A1”).Copy Range(“C1”) Range(“A1:A3”).Copy Range(“D1:D3”) Range(“A1:A3”).Copy Range(“D1”) ‘Range.Copy с одного листа на другой Worksheets(“Лист1”).Range(“A1”).Copy Worksheets(“Лист2”).Range(“A1”) ‘Range.Copy с одного файла (на другой Workbooks(“План.xlsx”).Worksheets(“Лист1”).Range(“A1”).Copy _ Workbooks(“Факт.xlsx”).Worksheets(“Лист1”).Range(“A1”)End Sub

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

Sub Копируем_только_значения()’Установите значения ячеек равными другим, чтобы вставить значения’Устанавливает равенство одного диапазона другому Range(“C1”).Value = Range(“A1”).Value Range(“D1:D3”).Value = Range(“A1:A3”).Value ‘Равенство значений между листами Worksheets(“Лист1”).Range(“A1”).Value = Worksheets(“Лист2”).Range(“A1”).Value ‘Равенство значений между книгами Workbooks(“Факт.xlsx”).Worksheets(“Лист1”).Range(“A1”).Value = _ Workbooks(“План.xlsx”).Worksheets(“Лист1”).Range(“A1”).Value End Sub

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

Sub Копируем_с_помощью_специальной_вставки()’Используйте метод Range.PasteSpecial для выбора типа вставки ‘Копируем и вставляем через СпецВставкуRange(“A1”).CopyRange(“A5”).PasteSpecial Paste:=xlPasteFormats’Используем спецвставку между листамиWorksheets(“Лист1”).Range(“A2”).CopyWorksheets(“Лист2”).Range(“A2”).PasteSpecial Paste:=xlPasteFormulas’Используем спецвставку между файламиWorkbooks(“План.xlsx”).Worksheets(“Лист1”).Range(“A3”).CopyWorkbooks(“Факт.xlsx”).Worksheets(“Лист1”).Range(“A1”).PasteSpecial Paste:=xlPasteFormats’Убираем “бегающих муравьёв” после копирования (очищаем буфер обмена)Application.CutCopyMode = False End Sub

2 ответа

Лучший ответ

Пожалуйста, замените на следующее:

Dim rn As Range, rn1 As Range, sh As Worksheet, sh1 As WorksheetSet sh = Sheet2Set sh1 = Sheet3With shSet rn = .Range(.Cells(i, 2), .Cells(i, c))Set rn1 = sh1.Cells(i, 2)rn.Copy rn1End With

Если c это не переменная, замените на “c”

1

Nikolaos Polygenis 19 Дек 2018 в 10:44

Попробуй это:

Sheet2.Range(Cells(i, 2), Cells(i, c)).Copy destination:=Sheet3.Cells(i, 2)

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

Patrick Honorez 19 Дек 2018 в 10:59

Параметры

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

Присвоение диапазона ячеек переменной

Чтобы переменной присвоить диапазон ячеек, она должна быть объявлена как Variant, Object или Range:

Чтобы было понятнее, для чего переменная создана, объявляйте ее как Range.

Присваивается переменной диапазон ячеек с помощью оператора Set:

В выражении Range(Cells(3, 4), Cells(26, 18)) вместо чисел можно использовать переменные.

Для присвоения диапазона ячеек переменной можно использовать встроенное диалоговое окно Application.InputBox, которое позволяет выбрать диапазон на рабочем листе для дальнейшей работы с ним.

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

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

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

Переходите по ссылке, чтобы научиться 3 способам поиска последней заполненной ячейки

Адресация ячеек в диапазоне

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

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

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

Индексация строк и столбцов начинается с левой верхней ячейки. В диапазоне этого примера содержится 5 строк и 5 столбцов. На пересечении 2 строки и 4 столбца находится ячейка с индексом 9. Обратиться к ней можно так:

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

обращение к первой строке присвоенного диапазона размерностью 5х5:

и обращение к первому столбцу присвоенного диапазона размерностью 5х5:

Пример

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

Worksheets(“Sheet1”).Range(“A1:D4”).Copy _ destination:=Worksheets(“Sheet2”).Range(“E5”)

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

Public Sub CopyRows() Sheets(“Sheet1”).Select ‘ Find the last row of data FinalRow = Cells(Rows.Count, 1).End(xlUp).Row ‘ Loop through each row For x = 2 To FinalRow ‘ Decide if to copy based on column D ThisValue = Cells(x, 4).Value If ThisValue = “A” Then Cells(x, 1).Resize(1, 33).Copy Sheets(“SheetA”).Select NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(NextRow, 1).Select ActiveSheet.Paste Sheets(“Sheet1”).Select ElseIf ThisValue = “B” Then Cells(x, 1).Resize(1, 33).Copy Sheets(“SheetB”).Select NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(NextRow, 1).Select ActiveSheet.Paste Sheets(“Sheet1”).Select End If Next x End Sub

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

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

VBA Excel. Переменная диапазона ячеек (As Range) : 2 комментария

Добрый день! Подскажите пожалуйста, как можно задать диапазон (например всего одну строку) для поиска Cells.find.

Привет, Иван!
Для второй строки: Rows(2).Find(stroka)
Для диапазона: Range(«A2:G10»).Find(stroka)
stroka — это переменная или искомый текст в прямых кавычках.

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

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

Скачать файл с примерами

Загрузите книгу, содержащую все примеры из видео.

VBA Copy Paste.xlsm (91.7 KB)

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...