Вставка диапазона со сдвигом ячеек вправо или вниз методом 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 |
В этом случае седьмой столбец окажется на месте третьего столбца.
brunokaz Пользователь Сообщений: 68 |
Господа. Есть таблица. Юзер должен только заполнять данные в таблице и добавлять строки (по необходимости) макросом. Заголовок таблицы и расчет итогов защищен 1) Написал простейший макрос добавления строк Теперь столкнулся с проблемой. Выше этой таблицы есть области где юзер может добавить строки сам, вручную. Если он там добавляет, то у меня смещается диапазон вставки (так как он прописан конкретно в макросе), а также нарушается и итоговое суммирование (начальная ячейка прописана в ДВССЫЛ). Как быть? Эту таблицу можете посмотреть в примере. Буду благодарен за помощь |
Владимир Пользователь Сообщений: 8196 |
Пускай вставляет. Какие проблемы? «..Сладку ягоду рвали вместе, горьку ягоду я одна.» |
brunokaz Пользователь Сообщений: 68 |
Владимир,Спасибо за подсказку по сумме. Что будет если сверху добавить сверху таблицы строку? 1) Вставка будет осуществляться в 6 строку, которая уже сместиться на заголовок таблицы Понимаете? |
Владимир Пользователь Сообщений: 8196 |
Тогда нужно через ПОИСКПОЗ привязаться к слову «рыночная». «..Сладку ягоду рвали вместе, горьку ягоду я одна.» |
Nordheim Пользователь Сообщений: 3154 |
#5 16.08.2017 11:19:15 Аналог вашего макроса!
Изменено: Nordheim — 16.08.2017 11:21:40 «Все гениальное просто, а все простое гениально!!!» |
||
brunokaz Пользователь Сообщений: 68 |
Владимир,принято. Благодарю. Попробую. Только у меня строк надо ставить 5000 и главное чтобы никто больше не прописал слово рыночная в этом дипазоне Скажите, а по вставке строк макросом нет идей? ) |
Владимир Пользователь Сообщений: 8196 |
#7 16.08.2017 11:31:46
Тут нужны Ваши пояснения, что хотите получить на выходе? Копировать нужно с листа 2 одну строку или то, что заполнено и т.д. в этом духе. «..Сладку ягоду рвали вместе, горьку ягоду я одна.» |
||
brunokaz Пользователь Сообщений: 68 |
Nordheim, Изменено: brunokaz — 16.08.2017 11:49:44 |
brunokaz Пользователь Сообщений: 68 |
Владимир, тогда по примеру с адресами пройдусь: 1) Я заполнил таблицу, все данные в ней, и понял, что у меня есть еще 1 объект, данные по которому необходимо внести в эту таблицу. Я нажимаю кнопку — строка добавляется выше сроки заполненной мною ранее (становится первой в этой таблице). При этом, сохраняются форматирования, оформление и выпадающий список новой добавленной строки.я заполняю данные по второму объекту. Как-то так. Эта таблица большого заключения, под которой и над которой будет вестись работа по заполнению данных… Изменено: brunokaz — 16.08.2017 11:51:17 |
Nordheim Пользователь Сообщений: 3154 |
#10 16.08.2017 11:49:45 Файл без данных поэтому не отследил, ничего заполненного не должен удалять.
Subbrunokaz написал: 2) Вставляет по несколько строк всегда вставляет только 1 строку brunokaz написал: 3) в случае добавления строк выше таблицы, начнется чорти чо. Проблема не решается получается Как может макрос вставит строку выше таблицы? Вы планируете смещать таблицу? Изменено: Nordheim — 16.08.2017 11:51:30 «Все гениальное просто, а все простое гениально!!!» |
||
Владимир Пользователь Сообщений: 8196 |
А почему Вы не хотите просто защитить первые три строки от вставки строк, редактирования? «..Сладку ягоду рвали вместе, горьку ягоду я одна.» |
brunokaz Пользователь Сообщений: 68 |
#12 16.08.2017 11:54:56 Nordheim, Мы привязаны к строке 6. Если я добавлю строку выше таблицы, это же станет строкой заголовка и начнуться проблемы
Изменено: brunokaz — 16.08.2017 11:55:25 |
||
Nordheim Пользователь Сообщений: 3154 |
#13 16.08.2017 12:02:54 Я не пойму как вы добавите строку выше таблицы, в коде зашита вставка в 6 строку, и дальнейшее форматирование конкретно 6 сроки.
Вроде код примитивный до невозможности и все понятно. «Все гениальное просто, а все простое гениально!!!» |
||
Nordheim Пользователь Сообщений: 3154 |
#14 16.08.2017 12:03:54
Каким образом? «Все гениальное просто, а все простое гениально!!!» |
||
brunokaz Пользователь Сообщений: 68 |
Nordheim, в моем примере выделите строку два и вручную добавьте строку, а потом добавьте строку в таблицу при помощи написанного Вами макроса. Получится так, что строка 6 (Rows(«6:6»).Insert Shift:=xlDown) это уже строка заголовка таблицы ….. Код простой, может я не верно объясняю, за что и извиняюсь, если это так. Изменено: brunokaz — 16.08.2017 12:18:40 |
Nordheim Пользователь Сообщений: 3154 |
#16 16.08.2017 12:27:19
Я и спросил разве таблица будет смещаться?
проделайте манипуляции с вашим макросом результат идентичный будет. «Все гениальное просто, а все простое гениально!!!» |
||||
brunokaz Пользователь Сообщений: 68 |
#17 16.08.2017 12:39:57
Не понял фразу сначала по смещению….
Согласен
Этот лист состоит из десятков таблиц. Таблицы и их форму изменять нельзя — это утвержденная форма заключения, но в некоторых местах строки добавлять можно (например под таблицами), с целью отражения комментариев к изложенным в таблицах данным и изложением доп инфы по данным из таблицы. Изменено: brunokaz — 16.08.2017 12:40:19 |
||||||
Владимир Пользователь Сообщений: 8196 |
Попробуйте добавить строки выше табличной формы.. Изменено: Владимир — 16.08.2017 13:54:52 «..Сладку ягоду рвали вместе, горьку ягоду я одна.» |
brunokaz Пользователь Сообщений: 68 |
#19 16.08.2017 15:09:04
Лист защищен…. |
||
brunokaz Пользователь Сообщений: 68 |
Если эту проблему не решить или трудно решаема, прошу подтвердить кто может. Тогда я буду думать что делать… |
Nordheim Пользователь Сообщений: 3154 |
#21 17.08.2017 08:39:47
«Все гениальное просто, а все простое гениально!!!» |
||
brunokaz Пользователь Сообщений: 68 |
Nordheim, к сожалению это не решает вопрос с возможным смещением таблицы. Если только весь лист не защищать по вставке строк, что я не могу сделать Изменено: brunokaz — 17.08.2017 09:16:32 |
Nordheim Пользователь Сообщений: 3154 |
#23 17.08.2017 09:22:28
Почему же?, Строки вставляются благополучно макросом. Пользователь вставить строки не может. как в таком случае сместится таблица? «Все гениальное просто, а все простое гениально!!!» |
||
brunokaz Пользователь Сообщений: 68 |
Nordheim, ладно…придется запрещать пользователям вставлять строки. Спасибо Вам за помощь |
Nordheim Пользователь Сообщений: 3154 |
Попробуйте сделать обходной вариант. Вставление строк в любое место кроме шапки таблицы, с использованием InputBox. «Все гениальное просто, а все простое гениально!!!» |
brunokaz Пользователь Сообщений: 68 |
|
Kcuxa_xa Пользователь Сообщений: 68 |
Подскажите, а что нужно поменять в макросе, что бы он добавлял новую строку не в начало таблицы, а в конец? Изменено: Kcuxa_xa — 07.01.2019 22:26:50 |
Nordheim Пользователь Сообщений: 3154 |
Kcuxa_xa, А в чем смысл? Вам нужно вставить пустую строку перед последней заполненной в таблице? «Все гениальное просто, а все простое гениально!!!» |
Kcuxa_xa Пользователь Сообщений: 68 |
#29 07.01.2019 23:16:38
да Вы правы это в принципе не критично. А не подскажите как в таком случае сделать, что бы новая строка автоматом нумеровалась по порядку? |
||
Nordheim Пользователь Сообщений: 3154 |
#30 07.01.2019 23:29:58 Файл пример покажите.
Изменено: Nordheim — 07.01.2019 23:34:39 «Все гениальное просто, а все простое гениально!!!» |
||
0 / 0 / 0 Регистрация: 10.09.2011 Сообщений: 4 |
|
1 |
|
Макросы вставки строки сверху/снизу…10.09.2011, 16:07. Показов 89125. Ответов 11
Здравствуйте! Прошу вас помочь, сам я точно не справлюсь!! В таблице, скажем, из 4-х столбцов (A,B,C,D) необходимо добавить строку сверху. При этом по столбцу A происходит автоматическая пере-нумерация. По столбцу D считается произведение B и C. То же самое для добавления строки снизу. Прикрепил файл, содержащий таблицу. В силу своих возможностей в ней сделал макросы для Удаления строк. А со Вставками большой ступор. Смог только частично написать вставку снизу, но как сделать автоматическую нумерацию и формулу не знаю. Заранее благодарен!
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
10.09.2011, 16:07 |
11 |
toiai 3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
||||||||||||
10.09.2011, 18:31 |
2 |
|||||||||||
Удаление строки предполагает текущую строку, зачем заморочка сверху снизу, если можно сместить курсор вверх или вниз и удалить, тоже самое со ставкой… Вставить строку сверху можно так:
Добавлено через 6 минут
Добавлено через 8 минут
1 |
Frank Nilson 0 / 0 / 0 Регистрация: 10.09.2011 Сообщений: 4 |
||||
10.09.2011, 21:15 [ТС] |
3 |
|||
Удаление строки предполагает текущую строку, зачем заморочка сверху снизу, если можно сместить курсор вверх или вниз и удалить, тоже самое со ставкой… Toiai, спасибо! Так действительно проще. А каким образом прописать автоматический подсчет формулы в столбце D и автоматическую нумерацию в столбце А при добавлении строки сверху/снизу? В этом вся загвоздка… Добавлено через 25 минут
Вставить строку снизу:
В этом случае вставляет снизу строки 11. А мне нужно было вставить строку снизу самой последней строки таблицы, поэтому я использовал для удаления и вставки ту заморочку=))
0 |
toiai 3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
||||||||
10.09.2011, 22:54 |
4 |
|||||||
Вместо 11 строки применить значение последней строки. Поскольку последняя строка итоговая, предлагаю вставлять строку сверху, при этом автоматически и формат вставится. По поводу нумерации, перед вставкой считать значение ячейки с предитоговой строки
По формуле:
Добавлено через 10 минут
1 |
0 / 0 / 0 Регистрация: 10.09.2011 Сообщений: 4 |
|
10.09.2011, 23:42 [ТС] |
5 |
toiai, логику понимаю, но я не могу написать сам макрос, поскольку никогда не программировал. Вы не мог ли бы показать пример одного макроса на добавление строки сверху с автоматической нумерацией и формулой по той таблице? Буду очень благодарен!
0 |
3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
|
11.09.2011, 10:38 |
6 |
Вот примерно так.
1 |
730 / 406 / 95 Регистрация: 19.12.2010 Сообщений: 756 |
|
11.09.2011, 12:32 |
7 |
Вариант вставки строки сверху.
1 |
0 / 0 / 0 Регистрация: 10.09.2011 Сообщений: 4 |
|
11.09.2011, 12:51 [ТС] |
8 |
Друзья! Спасибо огромное! Очень выручили!!
0 |
syserr |
|
14.05.2013, 08:43 |
9 |
в продолжении темы прошу помощи в решении аналогичного вопроса применительно к моему файлу xls. Заранее благодарствую. |
0 / 0 / 0 Регистрация: 26.06.2013 Сообщений: 7 |
|
26.06.2013, 12:18 |
10 |
Ребят, чтобы не создавать отдельную тему, подскажите: Есть столбец с данными А1: необходимо добавить 2 пустые строки после каждой заполненной строки То есть по клику по кнопке, запускается макрос, добавляющий пустые 2 строки после строки А1 (не менее 800 вниз)
0 |
Аксима 6076 / 1320 / 195 Регистрация: 12.12.2012 Сообщений: 1,023 |
||||
26.06.2013, 12:37 |
11 |
|||
Здравствуйте, @koskokoss, Вот примерное решение:
С уважением,
1 |
0 / 0 / 0 Регистрация: 26.06.2013 Сообщений: 7 |
|
26.06.2013, 13:32 |
12 |
Спасибо, то что нужно, только вставляет после второй строки(
0 |
Макрос вставки n строк выше активной ячейки и копирование |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Предположим, у вас есть диапазон данных, и вы хотите автоматически вставлять пустые строки выше или ниже определенного значения в Excel, например, автоматически вставлять строки ниже нулевого значения, как показано ниже. В Excel нет прямого способа решить эту задачу, но я могу ввести код макроса для автоматической вставки строк на основе определенного значения в Excel.
Вставить строку ниже на основе значения ячейки с помощью VBA
Вставьте строку выше на основе значения ячейки с помощью Kutools for Excel
Чтобы вставить строку на основе значения ячейки, запустив VBA, выполните следующие действия:
1. Нажмите Alt + F11 одновременно, а Microsoft Visual Basic для приложений окно выскакивает.
2. Нажмите Вставить > Модули, затем вставьте ниже код VBA во всплывающий Модули окно.
VBA: вставьте строку ниже на основе значения ячейки.
Sub BlankLine()
'Updateby20150203
Dim Rng As Range
Dim WorkRng As Range
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type: = 8)
Set WorkRng = WorkRng.Columns(1)
xLastRow = WorkRng.Rows.Count
Application.ScreenUpdating = False
For xRowIndex = xLastRow To 1 Step - 1
Set Rng = WorkRng.Range("A" & xRowIndex)
If Rng.Value = "0" Then
Rng.Offset(1, 0).EntireRow.Insert Shift: = xlDown
End If
Next
Application.ScreenUpdating = True
End Sub
3. Нажмите F5 ключа или Run нажмите кнопку, появится диалоговое окно и выберите столбец, содержащий ноль. Смотрите скриншот:
4. Нажмите OK. Тогда пустые строки будут вставлены ниже нулевого значения.
Функции:
1. Если вы хотите вставить строки на основе другого значения, вы можете изменить 0 на любое значение, которое вы хотите в VBA: Если Rng.Value = «0», то.
2. Если вы хотите вставить строки выше нуля или другого значения, вы можете использовать приведенный ниже код vba.
VBA: вставить строку выше нулевого значения:
Sub BlankLine()
'Updateby20150203
Dim Rng As Range
Dim WorkRng As Range
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type: = 8)
Set WorkRng = WorkRng.Columns(1)
xLastRow = WorkRng.Rows.Count
Application.ScreenUpdating = False
For xRowIndex = xLastRow To 1 Step - 1
Set Rng = WorkRng.Range("A" & xRowIndex)
If Rng.Value = "0" Then
Rng.EntireRow.Insert Shift: = xlDown
End If
Next
Application.ScreenUpdating = True
End Sub
Если вы не знакомы с VBA, вы можете попробовать Kutools for Excel‘s Выбрать определенные ячейки утилита, а затем вставьте строки выше.
После установки Kutools for Excel, пожалуйста, сделайте следующее:(Бесплатная загрузка Kutools for Excel Сейчас!)
1. Выберите список, из которого вы хотите найти определенные ячейки, и нажмите Кутулс > Выберите > Выбрать определенные ячейки. Смотрите скриншот:
2. В появившемся диалоговом окне отметьте Весь ряд вариант, а затем перейдите, чтобы выбрать Равно от Конкретный тип список, а затем введите значение, которое вы хотите найти, в правом текстовом поле. Смотрите скриншот:
3. Нажмите Ok, и появится диалоговое окно, напоминающее количество выбранных строк, просто закройте его.
4. Поместите курсор в одну выбранную строку и щелкните правой кнопкой мыши, чтобы выбрать Вставить из контекстного меню. Смотрите скриншот:
Теперь строки вставляются выше на основе определенного значения.
Относительные статьи:
- Вставить пустые строки в Excel
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (43)
Оценок пока нет. Оцените первым!