Вырезание, перемещение, копирование и вставка ячеек (диапазонов) в VBA Excel. Методы Cut, Copy и PasteSpecial объекта Range, метод Paste объекта Worksheet.
Метод Range.Cut
Синтаксис
1 |
Range.Cut (Destination) |
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен (перемещен) вырезанный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект вырезается в буфер обмена. |
Для вставки на рабочий лист диапазона ячеек, вырезанного в буфер обмена методом Range.Cut, следует использовать метод Worksheet.Paste.
Метод Range.Copy
Синтаксис
1 |
Range.Copy (Destination) |
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен скопированный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект копируется в буфер обмена. |
Метод Worksheet.Paste
Синтаксис
1 |
Worksheet.Paste (Destination, Link) |
Метод Worksheet.Paste работает как с диапазонами ячеек, вырезанными в буфер обмена методом Range.Cut, так и скопированными в буфер обмена методом Range.Copy.
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон (ячейка), указывающий место вставки содержимого буфера обмена. Если этот параметр не указан, используется текущий выделенный объект. |
Link | Необязательный параметр. Булево значение, которое указывает, устанавливать ли ссылку на источник вставленных данных: True – устанавливать, False – не устанавливать (значение по умолчанию). |
В выражении с методом Worksheet.Paste можно указать только один из параметров: или Destination, или Link.
Для вставки из буфера обмена отдельных компонентов скопированных ячеек (значения, форматы, примечания и т.д.), а также для проведения транспонирования и вычислений, используйте метод Range.PasteSpecial (специальная вставка).
Примеры
Вырезание и вставка диапазона одной строкой (перемещение):
1 |
Range("A1:C3").Cut Range("E1") |
Вырезание ячеек в буфер обмена и вставка методом ActiveSheet.Paste:
1 2 |
Range("A1:C3").Cut ActiveSheet.Paste Range("E1") |
Копирование и вставка диапазона одной строкой:
1 |
Range("A18:C20").Copy Range("E18") |
Копирование ячеек в буфер обмена и вставка методом ActiveSheet.Paste:
1 2 |
Range("A18:C20").Copy ActiveSheet.Paste Range("E18") |
Копирование одной ячейки и вставка ее данных во все ячейки заданного диапазона:
1 |
Range("A1").Copy Range("B1:D10") |
Странно, что не рассмотрено копирование ячеек, которые 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, но строки на нем не удаляет, циклы пошагово проходят, но ничего не изменяется.)
Спасибо за ответ.
Максим, в этом случае код будет еще проще:
На одном компе копирует на лист 4 , но не удаляет строки на нем, хотя циклы проходит. Может много значений? в таблице более 2000 строк.
На втором — вылетает ошибка 9 сразу на 3 строке кода.
А файл один и тот же, или код вставлен на разных компьютерах в разные файлы?
разные документы. Код вставлен в разные файлы.
В файле на первом компьютере числа 500 сохранены как текст.
В файле на втором компьютере нет ярлыка с именем
"Лист4"
, если третья строка —With Worksheets("Лист4")
.Здравствуйте,Евгений. Все заработало. Я прогонял ее в ручном режиме. А в автомате заработала. Были повторения в названиях, поэтому после перепроверки всех кодов, все заработало.Спасибо! И файл взял прежний, без левых надстроек и автоматизации.
Добрый день!
Подскажите пожалуйста код.
Есть книга состаящая из 2 листов.
Есть заполненный столбец А на листе Text
Задача:
1) взять на листе Text значение A1
2)вставить в лист «главная» ячейка Т4.
3)Запустить формирование текста (этот блок готов)
4) с листа «главная» ячейка Т5 копируем текст и вставляем в лист Text колонка В на против ранее скопированного текста (задание 1)
И так далее по циклу
Здравствуйте!
Помогите пожалуйста, преобразовать часть макроса и сделать вставку не со следующей строки а со следующего столбца:
Добрый день, Максим!
Попробуйте так:
Спасибо Евгений,
Такой код каждый лист вставляет с новой строки, а не столбца
Очень хотелось бы чтобы новый лист с нового столбца
Евгений,Спасибо.
Данный скрипт вставляет в следующую строку, а мне хотелось бы в следующий столбец
Это странно, что у вас скопированный диапазон вставляется в новую строку. Запустите этот код и вы увидите, как пять раз происходит вставка и каждый раз в новый столбец:
Переменная
n
здесь не нужна, я ее добавил только для того, чтобы код был похож на ваш.Евгений простите.
С VBA только знакомлюсь.
Помогите пожалуйста скорректировать код:
Нужно со всех листов собрать только столбец «B» в один лист в той-же книге. Шапка столбца совпадает с именем листа. Листов много и их количество меняется.
Заранее благодарю.
Очень Выручаете
Максим, смотрите ответ здесь.
Всем привет.
нужна помощь, есть макрос который копирует из одного файла лист и вставляет его в другой, берет только числа без формата, можно сделать чтобы он брал еще и текст?
Добрый день. Не подскажете как в VBA EXCEL скопировать строку из листа1 и вставить в лист2, потом выбрать например другую строку в листе1 и вставить в лист2 после предыдущей
Добрый день, Владимир!
Евгений, благодарю! А не подскажете, как именно строку активной ячейки скопировать с одного листа на другой, а потом добавлять на другой лист с нарастающей. (Да, и куда можно перевести благодарность :))
Владимир, используйте следующий код, заменив
Лист15
на название ярлыка целевого листа, куда будут добавляться копируемые строки:Первая ячейка копируемой строки должна быть непустой. Если она может быть пустой, тогда
.Range("A:A")
замените на столбец в котором не будет пустых ячеек, например:.Range("D:D")
или любой другой, где не будет пустых ячеек.И еще вариант, при котором допускаются пустые ячейки, но в первой строке хотя бы одна ячейка в диапазоне
Range("A1:S1")
целевого листа должна быть непустой:Благодарю за помощь! Скиньте номер карты или телефона- поддержу ваш канал
Добрый день! Есть два листа: на одном у меня все обращения жителей, на другом у меня та же таблица с обращениями, но ячейки содержат ссылки на первую и стоит фильтр по категориям обращения (например, ЖКХ). Мне нужна помощь: если я нахожу ошибку в ячейке в таблице второго листа, то перехожу на первый лист и мотаю ползунок, пока не нахожу искомую строку. Как написать код, чтобы по активной ячейке ВТОРОГО листа (нажатие кнопки) активировалась ячейка таблицы ПЕРВОГО листа? Если кратко — активная ячейка второго листа — команда — активная ячейка первого листа. Спасибо.
Не за что
Благодарствую
Добрый день, Владимир!
Еще один вариант смотрите в последнем абзаце этой статьи.
Добрый день. Подскажите, пожалуйста следующие условия (в виде кода vba) для копирования диапазона ячеек (к примеру A1:A10) из таблицы 1 и вставки в Талицу 2 с одинаковым количеством столбцов: если значения копируемых ячеек совпадают со значениями в Таблице 2, то копировать данные поверх; если не совпадают, то копировать на строку ниже; если хотя бы одна из ячейка из данного диапазона пуста, то выводить ошибку, либо не выполнять действие.
Здравствуйте! На листе есть данные в трех столбцах по пять тысяч строк — в строках ссылки в перемешку. Помогите этим ссылкам создать каждой свой столбец без потери своей строки в которой до этого ссылка находилась.
Вижу так: Было три столбца в 5000 строк. Станет n — кол-во столбцов (зависит от кол-ва доменов в 3 столбцах) с тем же кол-вом строк.
p.s. доменов 249, ссылок 5000. — Пробовал создать столбцы с названием домена и туда поместить ссылки к нему относящиеся.
Но не смог придумать как автоматизировать это. Помогите пожалуйста с этим вопросом и что почитать чтобы самому в этом разобраться.
Добрый день.
Подскажите пожалуйста как написать код что бы скопировать строки, диапазоном А-N по столбцам, если хотя бы в одной ячейке есть значения и вставить их на другой лист в ячейку А9.
Здравствуйте, Иван!
Копируем с Лист12 на Лист13 с помощью цикла:
благодарю за помощь. работает)
извините что прошу помощи опять, но могли бы помочь? у меня на 13 листе заготовлена одна строка для вставки энного количества строчек, а с 10 строки заполнены поля, при копировании строк он их не смещает, а перезаписывает. можно ли как то еще сделать что бы при вставке строк на 13 листе не перезаписывал строки которые там есть ниже 9, а как бы смещал их вниз?
Замените блок If на следующий:
Если не хотите, чтобы добавлялась разделительная пустая строка, замените строчку кода
на
Благодарю за наставления, все работает отлично
Здравствуйте, подскажите пожалуйста код, который позволит мне копировать по одной нужной ячейке в рабочий excel файл из других файлов находящихся в той же папке. Есть некая база в виде excel таблички из которой постоянно берутся значения из столбца «№ реестр» + 4 столбца рядом стоящих, которые могут менять своё положение — пример: A1:C1, E1. Эти данные мне нужно скопировать в другой excel файл в активную строчку, чтоб данные копировались в таком же порядке. То есть работа происходит только с одной строчкой, но разными файлами по требованию, хочу сделать готовый макрос с определённым названием, для облегчения отчётности и актуализации базы.
Здравствуйте!
Подскажите пожалуйста код, который соберёт в один файл на один лист, из нескольких файлов с одинаковыми именами файлов и листов, таблицу в 50 столбцов с последовательным добавлением данных, чтобы собрать данные со всех листов в один.
Как сделать макрос который бы находил название комнаты, например — "Помещение 1" в 1 колонке, далее по колонкам — пол, стяжка, цементно-песч. и по строкам вниз снова "Помещение 1" и так далее. Мне нужно чтобы макрос таблицу с Помещениями 1 скопировал и вставил ниже, после пустой строки, как бы шаблон сделал, чтобы все строки с помещениями 1 скопировались, а не строгий диапазон. Определял помещение по названию и дублировал таблицу ниже.
Здравствуйте, Павел!
Ответ смотрите в статье Копирование строк по условию.
Здравствуйте!
Подскажите пожалуйста, требуется сравнить список 1 со списком 2 и если значения из списка 1 есть в списке 2 то перенести некоторые значения на указанный лист в книге. Выдаётся ошибка 91
Sub Ðååñòð()
Dim i As Long
Dim a As Variant
Dim b As Variant
Dim ñ As Variant
Dim n As Long
Dim z As Long
Dim Sum As Object
a = Application.InputBox("Значение 1: ")
b = Application.InputBox("Значение 2: ")
n = Int(Application.InputBox("Значение 3: "))
b = Int(Application.InputBox("Значение 4: "))
For i = 1 To n
Set Sum = Range("C2:C1025").Find(Sheets("Лист2").Cells(i, 1))
Sheets("Лист3").Cells(i + 1, 2) = Sheets("Лист1").Cells(Sum.Row, 3)
Next
End Sub
Здравствуйте, Владимир!
Попробуйте так:
Подскажите какой метод использовать что бы вставить в ячеку Excel значение (простое 5 значное число ) скопированое не в другой ячеке, а в другой програме просто как число из строки ?
Здравствуйте, Виталий!
Это можно сделать, используя объект DataObject:
Подробнее о работе с буфером обмена смотрите в статье VBA Excel. Буфер обмена (копирование, вставка, очистка).
Добрый день, у меня есть файлы, в которых одинаковые шаблоны. Мне надо макросом из всех собрать данные в одну. Кол-во столбцов неизменно B:R. Проблема в том, что где-то есть информация, где-то 50 строчек, а где-то одна. Как прописать, чтобы выделялся только диапазон с данными? Т.е. если пусто, ничего, если одна строка, то только одна, если 50, то все 50.
Спасибо.
Здравствуйте, Мария!
Используйте свойство Range.CurrentRegion:
Не работает, выделяется все что сверху, в том числе и шапка таблицы. Мне это не надо.
Нужен диапазон B4:R4 и ниже строки, если есть.
Евгений, если пусто то выбирается шапка таблицы, как прописать, чтобы ничего не выбиралось?
Обсуждение закрыто.