Вставка диапазона со сдвигом ячеек вправо или вниз методом 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 Регистрация: 23.12.2012 Сообщений: 15 |
|
1 |
|
23.12.2012, 00:31. Показов 40216. Ответов 85
Здравствуйте! Прошу вас помочь, сам я точно не справлюсь!! В таблице, скажем, из 4-х столбцов (A,B,C,D) необходимо добавить строку снизу. При этом по столбцу A происходит автоматическая пере-нумерация. а последняя строка Итого: не удаляется. если можно Прикрепил файл, содержащий таблицу. В силу своих возможностей в ней сделал макросы для Удаления строк. А со Вставками большой ступор. Смог только частично написать вставку снизу, но как сделать автоматическую нумерацию и формулу не знаю. Заранее благодарен!
0 |
Alex77755 11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
||||
23.12.2012, 13:07 |
2 |
|||
Только откажись от объединения ячеек
Добавлено через 1 минуту
1 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||
23.12.2012, 13:39 |
3 |
|||
Можно не убирать объединение, и без цикла:
Там только рамка пропадает — ну это можно ещё пару строк дописать — форматировать Cells(l, 1)
1 |
0 / 0 / 0 Регистрация: 23.12.2012 Сообщений: 15 |
|
23.12.2012, 13:46 [ТС] |
4 |
Ребят вы не могли бы скинуть документ который вы сделали…я даже не знаю куда это надо ввести…пожалуйста помогите…..заранее благодарен
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
23.12.2012, 13:52 |
5 |
Можно не убирать объединение, и без цикла: Можно, наверное. Миниатюры
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
23.12.2012, 13:54 |
6 |
Я к тому, что делал не на отвлечённой книге, а на конкретной Миниатюры
0 |
0 / 0 / 0 Регистрация: 23.12.2012 Сообщений: 15 |
|
23.12.2012, 14:02 [ТС] |
7 |
это надо просто вставить туда,…..
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
23.12.2012, 14:05 |
8 |
В силу своих возможностей в ней сделал макросы для Удаления строк А где ж ты их делал раньше?
0 |
0 / 0 / 0 Регистрация: 23.12.2012 Сообщений: 15 |
|
23.12.2012, 14:06 [ТС] |
9 |
я просто вставил кнопки и назначал макросы…а как вы, я не умею
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
23.12.2012, 14:06 |
10 |
Алексей, я тоже делал на конкретной. Мистика…
0 |
0 / 0 / 0 Регистрация: 23.12.2012 Сообщений: 15 |
|
23.12.2012, 14:13 [ТС] |
11 |
если можешь скинь мне готовый файл,… пожалуйста Добавлено через 5 минут
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
23.12.2012, 14:14 |
12 |
См. первую страницу, в 15:06 Добавлено через 41 секунду
0 |
0 / 0 / 0 Регистрация: 23.12.2012 Сообщений: 15 |
|
23.12.2012, 14:15 [ТС] |
13 |
кроме строки итого:
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
23.12.2012, 14:16 |
14 |
Мистика не иначе! Кликните здесь для просмотра всего текста Я Александр
0 |
0 / 0 / 0 Регистрация: 23.12.2012 Сообщений: 15 |
|
23.12.2012, 14:21 [ТС] |
15 |
Александр! когда нажимаю кнопку Добавить или удалить…выводит не удается выполнить макрос..Возможно, этот макрос отсутствует в текущей книге либо все макросы отключены
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
23.12.2012, 14:22 |
16 |
Позор на мою седую голову: не в тот лист макрос вставил
0 |
0 / 0 / 0 Регистрация: 23.12.2012 Сообщений: 15 |
|
23.12.2012, 14:22 [ТС] |
17 |
в смысле
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
23.12.2012, 14:23 |
18 |
tt & ttt
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
23.12.2012, 14:24 |
19 |
Упс, Александр, извиняюсь
0 |
0 / 0 / 0 Регистрация: 23.12.2012 Сообщений: 15 |
|
23.12.2012, 14:25 [ТС] |
20 |
Hugo121, а по одной строки удалить получиться,…
0 |
Skip to content
Как вставить пустые строки в диапазон
На чтение 3 мин. Просмотров 3.6k.
Что делает макрос: Иногда бывает нужно добавить строки в наборе данных. Этот макрос позволяет вставить пустые строки в диапазоне.
Содержание
- Как макрос работает
- Код макроса
- Как этот код работает
- Как использовать
Как макрос работает
Этот макрос выполняет обратный цикл по выбранной области с помощью счетчика. Он начинается в последней строке диапазона, вставляя две пустые строки, а затем переходит к предыдущей строке в диапазоне. Он продолжает делать ту же самую вставку для каждого цикла, каждый раз, каждый раз увеличивая счетчик до предыдущей строки.
Код макроса
Sub VstavitPustieStrokiVDiapazon() 'Шаг 1: Объявляем переменные Dim MyRange As Range Dim iCounter As Long 'Шаг 2: Определяем целевой диапазон Set MyRange = Range("C6:D17") 'Шаг 3: Запуск обратного цикла For iCounter = MyRange.Rows.Count To 2 Step -1 'Шаг 4: Вставляем 2 пустые строки MyRange.Rows(iCounter).EntireRow.Insert MyRange.Rows(iCounter).EntireRow.Insert 'Шаг 5: Увеличиваем счетчик Next iCounter End Sub
Как этот код работает
- Сначала мы объявляем две переменные. Первая переменная является переменной объекта под названием MyRange. Это переменная объекта, которая определяет целевой диапазон. Другая переменная является переменной Long Integer называется iCounter. Эта переменная служит инкрементному счетчику.
- На шаге 2 макрос заполняет переменную MyRange с целевым диапазоном. В этом примере мы используем Range («C6:D17»). Если ваш целевой диапазон является именованным, можно просто ввести его название — Range («MyNamedRange»).
- На этом этапе макрос устанавливает параметры для инкрементного счетчика, чтобы начать на максимальном 1 для диапазона (MyRange.Rows.Count) и заканчивается в 2 (второй ряд от выбранного диапазона). Обратите внимание, что мы используем Шаг-1 классификатор. Поскольку мы указываем шаг -1, Excel знает, что мы будем увеличивать счетчик в обратном направлении, двигаясь назад один шаг на каждой итерации. В целом, Шаг 3 говорит Excel, чтобы начать в последней строке выбранного диапазона, двигаясь назад, пока он не дойдет до второй строки диапазона. При работе с диапазоном, вы можете явно вызвать какую-либо конкретную строку в диапазоне, передавая номер индекса строки к коллекции Rows диапазона. Например, диапазон («D6: D17»). Ряд (5) указывает на пятой строке в диапазоне D6: D17.
- На шаге 4, макрос использует переменную iCounter как номер индекса для коллекции Строки MyRange. Это помогает точно определить какой именно макрос работает в текущем цикле. Макрос использует метод EntireRow.Insert, чтобы вставить новую пустую строку. Так как мы хотим две пустые строки, мы делаем это дважды.
- На шаге 5, макрос возвращается к началу цикла увеличивать счетчик вниз.
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код.
В данном практическом примере приведен код макроса для умной вставки пустых строк между ячейками. Пошаговая инструкция как вставлять строки между объединенными и необъединенными ячейками одновременно для любой таблицы.
Макрос для вставки строк с определенной высотой
В таблице отчета по продажам в розничных точках содержаться объединенные ячейки, как показано ниже на рисунке:
Необходимо экспонировать группы ячеек для каждого штата. Для этого мы добавим по одной пустой строке между каждой группой розничных точек. При этом не имеет значение будет ли содержать группа объединенные ячейки или нет. Ведь некоторые группы состоят из одной строки. А также дополнительно уменьшим высоту этих пустых строк, чтобы внешний вид таблицы был стильным. Выполнить вручную все эти действия: выделение отдельных групп ячеек, вставка между ними пустых строк, а потом изменение высоты для этих же строк – это не рационально использование сил и времени. Особенно если таблица имеет десятки тысяч строк. Лучше написать свой макрос, который сам автоматически и молниеносно выполнит эту рутинную работу за Вас.
Перейдите в режим редактора макросов Visual Basic (ALT+F11):
Создайте в нем новый модуль с помощью инструмента: «Insert»-«Module». А потом запишите в него VBA-код самого макроса:
Sub VstavkaStrok()
Dim i As Long
Dim pustroka As Long
For i = Selection.Rows.Count To 2 Step -1
pustroka = Selection(i, 1).Row + 1
ActiveSheet.Rows(pustroka).Insert xlShiftDown
ActiveSheet.Rows(pustroka).RowHeight = 7
ActiveSheet.Rows(pustroka).Borders(xlInsideVertical). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Borders(xlEdgeLeft). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Borders(xlEdgeRight). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Interior. _
ColorIndex = xlColorIndexNone
i = i - Selection(i, 1).MergeArea.Rows.Count + 1
Next
End Sub
Теперь если мы хотим вставить по одной пустой строке между каждой объединенной и необъединенной ячейкой, которые находиться в столбце A? Тогда а в таблице отчета по продажам выделяем диапазон ячеек A:D18 и запускаем наш макрос выбрав инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«VstavkaStrok»-«Выполнить». После запуска макроса таблица будет выглядеть как показано на рисунке:
Сначала в коде объявлены две переменные:
- i – переменная выполняет роль счетчика в цикле.
- pustroka – переменная будет хранить в себе очередной номер для каждой строки выделенного диапазона.
В макросе находиться цикл, который запускает целый ряд инструкций для каждой строки в выделенном диапазоне ячеек. Направление цикла идет с нижней строки выделения к верхней.
- В первой инструкции мы присваиваем для переменной pustroka номер строки которая находиться под текущей строкой.
- Следующая инструкция добавляет пустую строку с высотой в 7 пикселей.
- Удаляются в добавленной строке все вертикальные границы, а также заливка.
- Уменьшается значение переменной i на количество строк, которые охватывает текущая объединенная ячейка, находящаяся в первом столбце выделенного диапазона.
Умная вставка строк с помощью макроса
Если же мы хотим экспонировать только самые большие группы. Допустим Вы желаете сделать так, чтобы макросом были вставлены пустые строки только после объединенных ячеек в столбце A, которые охватывают много строк. И не вставлять пустые строки после необъединенных ячеек или тех объединенных ячеек, которые охватывают не более 1-ой строки. Тогда после строки в коде макроса где описано начало цикла добавляем строку кода с условной инструкцией:
If Selection(i, 1).MergeArea.Rows.Count <> 1 Then
Также перед инструкцией конца цикла Next следует вставить инструкцию конца условия – End If.
Обратите внимание! Параметр условия для игнорирования объединенных ячеек с определенным количеством озвучиваемых строк можно будет даже настраивать, изменяя число после оператора сравнения.
Такая модификация кода макроса внутри цикла будет следить за тем применять ли ряд инструкций к текущей строке или игнорировать их на данном этапе прохода по срокам. Если же текущая строка не содержит необъединенной ячейки или объединенная ячейка охватывает более чем 1-ну строку, тогда для нее применяться все инструкции форматирования. Полная версия модифицированного года выглядит так:
Sub VstavkaStrok1()
Dim i As Long
Dim pustroka As Long
For i = Selection.Rows.Count To 2 Step -1
If Selection(i, 1).MergeArea.Rows.Count <> 1 Then
pustroka = Selection(i, 1).Row + 1
ActiveSheet.Rows(pustroka).Insert xlShiftDown
ActiveSheet.Rows(pustroka).RowHeight = 7
ActiveSheet.Rows(pustroka).Borders(xlInsideVertical). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Borders(xlEdgeLeft). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Borders(xlEdgeRight). _
LineStyle = xlLineStyleNone
ActiveSheet.Rows(pustroka).Interior. _
ColorIndex = xlColorIndexNone
i = i - Selection(i, 1).MergeArea.Rows.Count + 1
End If
Next
End Sub
Результат автоматического форматирования таблицы отчета с учетом новых условий в коде макроса:
Как видите с помощью макросов таблицы любых объемов данных можно форматировать в один клик мышкой.