Макрос для перемещения строк в excel

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

Юрий М., ну что же вы, :o    а еще гуру экселя
мышкой строки в экселе перетаскивать штатными средствами очень неудобно
курсор нужно наводить точно между строчек значок маленький можно и не заметить,
возможно или скопировать или перенести содержимое из одной строки (или ячейки даже?) в другую
а я говорю именно про перенос — обмен перетащил одну строчку на другую они и поменялись
как аналогичная функция в ворд таблице с нажатыми кнопками альт и шифт стрелками можно ганять выделенную строчку в таблице вверх и вниз куда и на сколько угодно — вот что мне нужно для экселя

Версия от 06.02.2023

Операционная система: Windows

Microsoft Excel 2007/2010/2013/2016/2019/365

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

Пошаговая инструкция по установке для различных версий Excel

Видео по работе с надстройкойsmotret-video

Для работы с надстройкой необходимо:

1. Скачать файл, который станет доступен для скачивания сразу после оплаты (порядок оплаты);

2. Установить надстройку, следуя пошаговой инструкции по установке для различных версий Excel;

3. Нажать кнопку вызова диалогового окна на вкладке «Надстройки»;

kak v excel peremestit stroki po usloviyu

4. В диалоговом окне надстройки задать стартовые условия и запустить программу.

kak-peremestit-stroki-v-excel 

*В случае, если в надстройку будут внесены какие-либо изменения или дополнения, то обновленную версию надстройки Вы получите бесплатно.

Макрос для перемещения строк по таблице при помощи цикла

maximkrasnotsvetov

Дата: Вторник, 15.03.2022, 16:28 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 1

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

[vba]

Код

Sub Макрос2()

‘ Макрос2 Макрос


Range(«L60:O105»).Select
Selection.Cut Destination:=Range(«L76:O121»)
Range(«L77:O121»).Select
Selection.Cut Destination:=Range(«L93:O137»)

End Sub

[/vba]

Сообщение отредактировал Serge_007Вторник, 15.03.2022, 17:06

 

Ответить

NikitaDvorets

Дата: Понедельник, 21.03.2022, 12:23 |
Сообщение № 2

Группа: Авторы

Ранг: Обитатель

Сообщений: 433


Репутация:

93

±

Замечаний:
0% ±


Excel 2019

maximkrasnotsvetov, здравствуйте.

Цитата

как зациклить данный процесс.

Судя по формулировке задачи, явно не хватает исходных данных.
Чтобы зациклить любой процесс, нужно хотя бы знать, когда следует остановиться.
Предлагаю приложить файл-пример Excel и дать в нем пояснения.

 

Ответить

msi2102

Дата: Вторник, 22.03.2022, 16:57 |
Сообщение № 3

Группа: Проверенные

Ранг: Обитатель

Сообщений: 291


Репутация:

104

±

Замечаний:
0% ±


Excel 2007

ничего не понял из Вашего объяснения, но попробуйте так, может угадал
[vba]

Код

Sub Макрос3()
Dim rng As Range
    Set rng = Range(«A1:B5»)
    n = 6
    For m = rng.Rows.Count To 1 Step -1
        Range(«A1»).Offset(n).Resize(m, rng.Columns.Count).Value = rng.Offset(rng.Rows.Count — m).Resize(m, rng.Columns.Count).Value
        n = n + m + 1
    Next
End Sub

[/vba]

К сообщению приложен файл:

_1.xlsm
(14.3 Kb)

 

Ответить

RAN

Дата: Вторник, 22.03.2022, 18:44 |
Сообщение № 4

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

msi2102, где ваш ведмедь?


Быть или не быть, вот в чем загвоздка!

 

Ответить

Ответить

Цитата
Сообщение от 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 макрос.

Понравилась статья? Поделить с друзьями:
  • Макрос для переименования файлов в excel
  • Макрос для матрицы в excel
  • Макрос для копирования ячеек excel
  • Макрос для копирования файла excel
  • Макрос для копирования только значений в excel