Вставка диапазона со сдвигом ячеек вправо или вниз методом Insert объекта Range. Вставка и перемещение строк и столбцов из кода VBA Excel. Примеры.
Range.Insert – это метод, который вставляет диапазон пустых ячеек (в том числе одну ячейку) на рабочий лист Excel в указанное место, сдвигая существующие в этом месте ячейки вправо или вниз. Если в буфере обмена содержится объект Range, то вставлен будет он со своими значениями и форматами.
Синтаксис
Expression.Insert(Shift, CopyOrigin) |
Expression – выражение (переменная), возвращающее объект Range.
Параметры
Параметр | Описание | Значения |
---|---|---|
Shift | Необязательный параметр. Определяет направление сдвига ячеек. Если параметр Shift опущен, направление выбирается в зависимости от формы* диапазона. | xlShiftDown (-4121) – ячейки сдвигаются вниз; xlShiftToRight (-4161) – ячейки сдвигаются вправо. |
CopyOrigin | Необязательный параметр. Определяет: из каких ячеек копировать формат. По умолчанию формат копируется из ячеек сверху или слева. | xlFormatFromLeftOrAbove (0) – формат копируется из ячеек сверху или слева; xlFormatFromRightOrBelow (1) – формат копируется из ячеек снизу или справа. |
* Если диапазон горизонтальный или квадратный (количество строк меньше или равно количеству столбцов), ячейки сдвигаются вниз. Если диапазон вертикальный (количество строк больше количества столбцов), ячейки сдвигаются вправо.
Примеры
Простая вставка диапазона
Вставка диапазона ячеек в диапазон «F5:K9» со сдвигом исходных ячеек вправо:
Range(«F5:K9»).Insert Shift:=xlShiftToRight |
Если бы параметр Shift не был указан, сдвиг ячеек, по умолчанию, произошел бы вниз, так как диапазон горизонтальный.
Вставка вырезанного диапазона
Вставка диапазона, вырезанного в буфер обмена методом Range.Cut, из буфера обмена со сдвигом ячеек по умолчанию:
Range(«A1:B6»).Cut Range(«D2»).Insert |
Обратите внимание, что при использовании метода Range.Cut, точка вставки (в примере: Range("D2")
) не может находится внутри вырезанного диапазона, а также в строке или столбце левой верхней ячейки вырезанного диапазона вне вырезанного диапазона (в примере: строка 1 и столбец «A»).
Вставка скопированного диапазона
Вставка диапазона, скопированного в буфер обмена методом Range.Copy, из буфера обмена со сдвигом ячеек по умолчанию:
Range(«B2:D10»).Copy Range(«F2»).Insert |
Обратите внимание, что при использовании метода Range.Copy, точка вставки (в примере: Range("F2")
) не может находится внутри скопированного диапазона, но в строке или столбце левой верхней ячейки скопированного диапазона вне скопированного диапазона находится может.
Вставка и перемещение строк
Вставка одной строки на место пятой строки со сдвигом исходной строки вниз:
Вставка четырех строк на место пятой-восьмой строк со сдвигом исходных строк вниз:
Вставка строк с использованием переменных, указывающих над какой строкой осуществить вставку и количество вставляемых строк:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Sub Primer1() Dim n As Long, k As Long, s As String ‘Номер строки, над которой необходимо вставить строки n = 8 ‘Количесто вставляемых строк k = 4 ‘Указываем адрес диапазона строк s = n & «:» & (n + k — 1) ‘Вставляем строки Rows(s).Insert End Sub ‘или то же самое с помощью цикла Sub Primer2() Dim n As Long, k As Long, i As Long n = 8 k = 4 For i = 1 To k Rows(n).Insert Next End Sub |
Перемещение второй строки на место шестой строки:
Rows(2).Cut Rows(6).Insert |
Вторая строка окажется на месте пятой строки, так как третья строка заместит вырезанную вторую строку, четвертая встанет на место третьей и т.д.
Перемещение шестой строки на место второй строки:
Rows(6).Cut Rows(2).Insert |
В этом случае шестая строка окажется на месте второй строки.
Вставка и перемещение столбцов
Вставка одного столбца на место четвертого столбца со сдвигом исходного столбца вправо:
Вставка трех столбцов на место четвертого-шестого столбцов со сдвигом исходных столбцов вправо:
Перемещение третьего столбца на место седьмого столбца:
Columns(3).Cut Columns(7).Insert |
Третий столбец окажется на месте шестого столбца, так как четвертый столбец заместит вырезанный третий столбец, пятый встанет на место четвертого и т.д.
Перемещение седьмого столбца на место третьего столбца:
Columns(7).Cut Columns(3).Insert |
В этом случае седьмой столбец окажется на месте третьего столбца.
loader77
Пользователь
Сообщений: 17
Регистрация: 25.11.2013
Юрий М., ну что же вы, а еще гуру экселя
мышкой строки в экселе перетаскивать штатными средствами очень неудобно
курсор нужно наводить точно между строчек значок маленький можно и не заметить,
возможно или скопировать или перенести содержимое из одной строки (или ячейки даже?) в другую
а я говорю именно про перенос — обмен перетащил одну строчку на другую они и поменялись
как аналогичная функция в ворд таблице с нажатыми кнопками альт и шифт стрелками можно ганять выделенную строчку в таблице вверх и вниз куда и на сколько угодно — вот что мне нужно для экселя
Версия от 06.02.2023
Операционная система: Windows
Microsoft Excel 2007/2010/2013/2016/2019/365
Надстройка позволяет пользователям быстро производить выборочное перемещение строк на новый лист. Пользователь в диалоговом окне задает искомые значения, выбирает диапазон, условие и ограничение по строкам (при необходимости), после чего запускает программу. Программа вырезает строки, удовлетворяющие заданным параметрам и вставляет их на новый лист рабочей книги.
Пошаговая инструкция по установке для различных версий Excel
Видео по работе с надстройкой
Для работы с надстройкой необходимо:
1. Скачать файл, который станет доступен для скачивания сразу после оплаты (порядок оплаты);
2. Установить надстройку, следуя пошаговой инструкции по установке для различных версий Excel;
3. Нажать кнопку вызова диалогового окна на вкладке «Надстройки»;
4. В диалоговом окне надстройки задать стартовые условия и запустить программу.
*В случае, если в надстройку будут внесены какие-либо изменения или дополнения, то обновленную версию надстройки Вы получите бесплатно.
Макрос для перемещения строк по таблице при помощи цикла |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Сообщение от AlexOld
Ноль это тоже значение, а не пустая ячейка. Возможно вы имеете ввиду или ноль, или пусто.
Ячейка имеет два состояния: пустая и не пустая, т.е. содержащая любой вид данных: текст, дата, число (включая 0).
Сообщение от Alex77755
Условия какие?
В описании я указал, что требуются «различные варианты». Это означает, что каждый из 6 вариантов будет действовать самостоятельно, выполняя ту функцию, которая изложена в описании. Например, вариант 2 должен выполнять следующий алгоритм:
1. На листе 1 в ячейку столбца Дата4 внесены данные;
2. Макрос определяет последнюю заполненную строку листа 2;
3. Строка с листа 1 перемещается на лист 2 после последней заполненной строки, найденной ранее. Строка перемещается, сохраняя исходное форматирование.
Добавлено через 13 минут
Сообщение от AlexOld
Пункты 3 и 4 у вас повторяются. Вопрос — это все должно быть реализовано в одной книге с возможностью выбора нужного пункта, или это разные варианты книги?
Пункты 3 и 4 аналоги пунктов 1 и 2. Разница только в листах. Вариант 1,2 работают на одном листе, вариант 3 и 4 перемещают строку с одного листа на другой.
Будем рассматривать каждый вариант, как отдельный макрос. Они все могут быть задействованы в одной книге, но изменение состояния ячейки будет приводить лишь к выполнению одного из 6 вариантов. И зависеть это будет от назначения листа. Запуск макроса будет выполняться как в автоматическом режиме, так и в ручном.
В общем, мне нужны макросы с комментариями, исполняющие конкретные действия, которые я описал, 1 вариант — 1 макрос.