Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Метод Range.Insert (вставка со сдвигом ячеек)

    Вставка диапазона со сдвигом ячеек вправо или вниз методом Insert объекта Range. Вставка и перемещение строк и столбцов из кода VBA Excel. Примеры.

    Метод Range.Insert

    Range.Insert – это метод, который вставляет диапазон пустых ячеек (в том числе одну ячейку) на рабочий лист Excel в указанное место, сдвигая существующие в этом месте ячейки вправо или вниз. Если в буфере обмена содержится объект Range, то вставлен будет он со своими значениями и форматами.

    Синтаксис

    Expression – выражение (переменная), возвращающее объект Range.

    Параметры

    Параметр Описание Значения
    Shift Необязательный параметр. Определяет направление сдвига ячеек. Если параметр Shift опущен, направление выбирается в зависимости от формы* диапазона. xlShiftDown (-4121) – ячейки сдвигаются вниз;
    xlShiftToRight (-4161) – ячейки сдвигаются вправо.
    CopyOrigin Необязательный параметр. Определяет: из каких ячеек копировать формат. По умолчанию формат копируется из ячеек сверху или слева. xlFormatFromLeftOrAbove (0) – формат копируется из ячеек сверху или слева;
    xlFormatFromRightOrBelow (1) – формат копируется из ячеек снизу или справа.

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

    Примеры

    Простая вставка диапазона

    Вставка диапазона ячеек в диапазон «F5:K9» со сдвигом исходных ячеек вправо:

    Если бы параметр Shift не был указан, сдвиг ячеек, по умолчанию, произошел бы вниз, так как диапазон горизонтальный.

    Вставка вырезанного диапазона

    Вставка диапазона, вырезанного в буфер обмена методом Range.Cut, из буфера обмена со сдвигом ячеек по умолчанию:

    Обратите внимание, что при использовании метода Range.Cut, точка вставки (в примере: Range("D2")) не может находится внутри вырезанного диапазона, а также в строке или столбце левой верхней ячейки вырезанного диапазона вне вырезанного диапазона (в примере: строка 1 и столбец «A»).

    Вставка скопированного диапазона

    Вставка диапазона, скопированного в буфер обмена методом Range.Copy, из буфера обмена со сдвигом ячеек по умолчанию:

    Обратите внимание, что при использовании метода Range.Copy, точка вставки (в примере: Range("F2")) не может находится внутри скопированного диапазона, но в строке или столбце левой верхней ячейки скопированного диапазона вне скопированного диапазона находится может.

    Вставка и перемещение строк

    Вставка одной строки на место пятой строки со сдвигом исходной строки вниз:


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


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


    Перемещение второй строки на место шестой строки:

    Вторая строка окажется на месте пятой строки, так как третья строка заместит вырезанную вторую строку, четвертая встанет на место третьей и т.д.


    Перемещение шестой строки на место второй строки:

    В этом случае шестая строка окажется на месте второй строки.

    Вставка и перемещение столбцов

    Вставка одного столбца на место четвертого столбца со сдвигом исходного столбца вправо:


    Вставка трех столбцов на место четвертого-шестого столбцов со сдвигом исходных столбцов вправо:


    Перемещение третьего столбца на место седьмого столбца:

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


    Перемещение седьмого столбца на место третьего столбца:

    В этом случае седьмой столбец окажется на месте третьего столбца.


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

    14 комментариев для “VBA Excel. Метод Range.Insert (вставка со сдвигом ячеек)”

    1. Здравствуйте. Не подскажете, как можно вставить пустые строки только перед теми ячейками, которые начинаются на УП… в столбце F, начиная с 7 строки? достаточно сравнения по первым 2 буквам. Спасибо.

      1. Евгений

        Добрый вечер, Максим!

    2. Спасибо!
      А если к этой программе добавить, чтобы она в эту вновь созданную строку скопировала данные из 3 ячеек той строки, перед которой мы вставили эту пустую строку:

      Строку мы вставили пустую, но требуется, чтобы в этой строке (например 9), в ячейку G, H и J вставились значения из строки, перед которой мы ее вставили (в данном случае 10) из ячеек E, F и J соответственно этого же листа.

      1. Евгений

        Здесь все просто — когда мы добавляем одну новую строку, исходная уходит вниз и ее номер становится на единицу больше:

    3. Добрый день. Подскажите пожалуйста, как можно скопировать диапазон ячеек, транспонируя столбцы в строки, и чтобы после каждого скопированного объекта макрос добавлял 2 свободных столбика и объединял эти ячейки, вставляя туда значение перед добавленными ячейками.

    4. Добрый день. Есть к примеру две умные таблицы одна под одной, подскажите как сделать так, чтоб при увеличение 1 таблицы вниз… вторая таблица смещалась на равное количество добавленных строк в 1 таблице

      1. Валерий

        Добрый день. Меня интересует тот же вопрос. Только таблицы на разных страницах и строка добавляется в разных местах таблицы.

    5. Здравствуйте.
      Подскажите, а как сделать так, чтобы вставляя строки ниже (допустим под 3 строкой появилась 4, но при этом 4 строка не стала основой нового макроса, а переместилась на 5 строку, чтобы при вставке строки на 6 не копировалось значение из 5

      1. Евгений

        Здравствуйте, Вадим!
        При вставке одной пустой строки между 3-й и 4-й строками новая строка становится четвертой, а все нижележащие строки перемещаются на одну строку вниз: 4-я становится пятой, 5-я — шестой, 6-я — седьмой и т.д. Я не понял из вашего вопроса, что должно произойти с этими строками дальше.

    6. Константин

      Здравствуйте!
      В примере "Rows("5:8").Insert" всё ясно, но чаще всего надо вставлять разное число строк.
      Как заменить строку 8 на переменную, чтобы «нижняя» строка бралась из значения ячейки?

      1. Евгений

        Здравствуйте, Константин!
        Добавил в статью примеры вставки строк с использованием переменных.

    7. Константин

      Ай спасибо, Евгений!
      Удивили тем, что и добавили и ещё в почту уведомили.
      Сегодня этим не многие могут похвастаться.
      Достойно! Благодарю.

    Обсуждение закрыто.