VBA 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 работает как с диапазонами ячеек, вырезанными в буфер обмена методом Range.Cut, так и скопированными в буфер обмена методом Range.Copy.

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон (ячейка), указывающий место вставки содержимого буфера обмена. Если этот параметр не указан, используется текущий выделенный объект.
Link Необязательный параметр. Булево значение, которое указывает, устанавливать ли ссылку на источник вставленных данных: True – устанавливать, False – не устанавливать (значение по умолчанию).

В выражении с методом Worksheet.Paste можно указать только один из параметров: или Destination, или Link.

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

Примеры

Вырезание и вставка диапазона одной строкой (перемещение):

Вырезание ячеек в буфер обмена и вставка методом ActiveSheet.Paste:

Копирование и вставка диапазона одной строкой:

Копирование ячеек в буфер обмена и вставка методом ActiveSheet.Paste:

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


Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

18 комментариев для “VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)”

  1. Странно, что не рассмотрено копирование ячеек, которые Cells.
    Например, следующая строка копирует ячейку A1 в B2

    а эта делает тоже самое, но демонстрирует,
    как можно добавить размер и смещение:

  2. Здравствуйте!
    Скажите, как можно копировать на Лист 1, а вставить на Лист 2 диапазон ячеек целиком, либо отсортированный по 1 признаку диапазон(например по какому-то определенному значению, скажем, числу «500» в одном столбце Листа 1)?

    1. Евгений

      Привет, Максим!
      Вот пример сортировки таблицы по значению 500 в первом столбце на "Лист6" и копирования диапазона с "Лист6" на "Лист4":

  3. Спасибо большое, только я, наверно, неправильно описал ситуацию.
    Сперва из эталонной таблицы Лист 1 копируем весь список на существующий Лист4.
    Затем, пропускаем шапку, и, начиная со строки7, уже на Лист4 ищем строку, у которой в столбце 5 стоит число 500.
    Вырезаем эту строку и вставляем на позицию строки 7. т.е первая после шапки.
    Ищем следующую строку — вырезаем, потом вставляем на позицию строки 7+1=8 и т.д.
    В итоге оставим только те строки, у которых в столбце 5 стоит число «500», остальные удаляются строки.

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

    Спасибо за ответ.

    1. Евгений

      Максим, в этом случае код будет еще проще:

  4. На одном компе копирует на лист 4 , но не удаляет строки на нем, хотя циклы проходит. Может много значений? в таблице более 2000 строк.
    На втором — вылетает ошибка 9 сразу на 3 строке кода.

    1. Евгений

      А файл один и тот же, или код вставлен на разных компьютерах в разные файлы?

    1. Евгений

      В файле на первом компьютере числа 500 сохранены как текст.
      В файле на втором компьютере нет ярлыка с именем "Лист4", если третья строка — With Worksheets("Лист4").

  5. Здравствуйте,Евгений. Все заработало. Я прогонял ее в ручном режиме. А в автомате заработала. Были повторения в названиях, поэтому после перепроверки всех кодов, все заработало.Спасибо! И файл взял прежний, без левых надстроек и автоматизации.

  6. Добрый день!
    Подскажите пожалуйста код.
    Есть книга состаящая из 2 листов.
    Есть заполненный столбец А на листе Text
    Задача:
    1) взять на листе Text значение A1
    2)вставить в лист «главная» ячейка Т4.
    3)Запустить формирование текста (этот блок готов)
    4) с листа «главная» ячейка Т5 копируем текст и вставляем в лист Text колонка В на против ранее скопированного текста (задание 1)
    И так далее по циклу

  7. Здравствуйте!
    Помогите пожалуйста, преобразовать часть макроса и сделать вставку не со следующей строки а со следующего столбца:

    1. Евгений

      Добрый день, Максим!
      Попробуйте так:

      1. Спасибо Евгений,
        Такой код каждый лист вставляет с новой строки, а не столбца

        Очень хотелось бы чтобы новый лист с нового столбца

      2. Евгений,Спасибо.
        Данный скрипт вставляет в следующую строку, а мне хотелось бы в следующий столбец

        1. Евгений

          Это странно, что у вас скопированный диапазон вставляется в новую строку. Запустите этот код и вы увидите, как пять раз происходит вставка и каждый раз в новый столбец:

          Переменная n здесь не нужна, я ее добавил только для того, чтобы код был похож на ваш.

          1. Евгений простите.
            С VBA только знакомлюсь.
            Помогите пожалуйста скорректировать код:

            Нужно со всех листов собрать только столбец «B» в один лист в той-же книге. Шапка столбца совпадает с именем листа. Листов много и их количество меняется.

            Заранее благодарю.
            Очень Выручаете

Добавить комментарий

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора.