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 по тематическим разделам со ссылками на все статьи.

    30 комментариев для “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» в один лист в той-же книге. Шапка столбца совпадает с именем листа. Листов много и их количество меняется.

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

    8. Всем привет.
      нужна помощь, есть макрос который копирует из одного файла лист и вставляет его в другой, берет только числа без формата, можно сделать чтобы он брал еще и текст?

    9. Владимир

      Добрый день. Не подскажете как в VBA EXCEL скопировать строку из листа1 и вставить в лист2, потом выбрать например другую строку в листе1 и вставить в лист2 после предыдущей

      1. Евгений

        Добрый день, Владимир!

        1. Владимир

          Евгений, благодарю! А не подскажете, как именно строку активной ячейки скопировать с одного листа на другой, а потом добавлять на другой лист с нарастающей. (Да, и куда можно перевести благодарность :))

          1. Евгений

            Владимир, используйте следующий код, заменив Лист15 на название ярлыка целевого листа, куда будут добавляться копируемые строки:

            Первая ячейка копируемой строки должна быть непустой. Если она может быть пустой, тогда .Range("A:A") замените на столбец в котором не будет пустых ячеек, например: .Range("D:D") или любой другой, где не будет пустых ячеек.

            И еще вариант, при котором допускаются пустые ячейки, но в первой строке хотя бы одна ячейка в диапазоне Range("A1:S1") целевого листа должна быть непустой:

            1. Владимир

              Благодарю за помощь! Скиньте номер карты или телефона- поддержу ваш канал

    10. Владимир

      Добрый день! Есть два листа: на одном у меня все обращения жителей, на другом у меня та же таблица с обращениями, но ячейки содержат ссылки на первую и стоит фильтр по категориям обращения (например, ЖКХ). Мне нужна помощь: если я нахожу ошибку в ячейке в таблице второго листа, то перехожу на первый лист и мотаю ползунок, пока не нахожу искомую строку. Как написать код, чтобы по активной ячейке ВТОРОГО листа (нажатие кнопки) активировалась ячейка таблицы ПЕРВОГО листа? Если кратко — активная ячейка второго листа — команда — активная ячейка первого листа. Спасибо.

      1. Не за что

    11. Добрый день. Подскажите, пожалуйста следующие условия (в виде кода vba) для копирования диапазона ячеек (к примеру A1:A10) из таблицы 1 и вставки в Талицу 2 с одинаковым количеством столбцов: если значения копируемых ячеек совпадают со значениями в Таблице 2, то копировать данные поверх; если не совпадают, то копировать на строку ниже; если хотя бы одна из ячейка из данного диапазона пуста, то выводить ошибку, либо не выполнять действие.

    12. Алексей

      Здравствуйте! На листе есть данные в трех столбцах по пять тысяч строк — в строках ссылки в перемешку. Помогите этим ссылкам создать каждой свой столбец без потери своей строки в которой до этого ссылка находилась.
      Вижу так: Было три столбца в 5000 строк. Станет n — кол-во столбцов (зависит от кол-ва доменов в 3 столбцах) с тем же кол-вом строк.
      p.s. доменов 249, ссылок 5000. — Пробовал создать столбцы с названием домена и туда поместить ссылки к нему относящиеся.
      Но не смог придумать как автоматизировать это. Помогите пожалуйста с этим вопросом и что почитать чтобы самому в этом разобраться.

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

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