Существует задача в два этапа: необходимо 1) добавить по несколько пустых строк (а именно — по 3 штуки) после каждой строки с содержимым и 2)скопировать на них содержимое строк, после которых эти пустые строки были добавлены (по сути, дублировать данные по три раза).
P. S. На форуме находил аналогичные вопросы и присланные по ним макросы, но они не соответствовали моим требованиям в полной мере, а поскольку я только начинаю своё знакомство с VBA, все мои попытки понять логику команд и адаптировать их под мой кейс приводили лишь к часам потраченного впустую времени (например, был макрос, который просто вставлял по одной пустой строке через одну и т. д.).
Прикладываю к этой теме файл с примером того, что нужно сделать, и прошу, по возможности, кратко описать логику команд и как я могу подстраивать их под индивидуальные случаи в будущем (допустим, если возникнет необходимость вставить не по три пустые строки, а по две или четыре). Также прикладываю найденный мной на форуме макрос, о котором шла речь (ссылка на тему от 2008 года: https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=2635)
"ДИСКЛЕЙМЕР"...такой текст-предупреждение пишется в самом начале, перед основным текстом или постановкой задачи. А вообще - стоит ли заменять нормальное слово на искаженную транскрипцию?
P.S. Поменяли, но опять неудачно Постскриптум, post scriptum, P.S. - после написанного
Sub InsertRows()
Dim i As Long, lr As Long
With Application
.ScreenUpdating = False '
.Calculation = xlCalculationManual '
lr = Cells(Rows.Count, "B").End(xlUp).Row 'находим последнюю заполненную ячейку в столбце "В"
For i = lr To 2 Step -1 'Цикл от последней ячейки до второй
Rows(i).Copy 'копируем строку
'от скопированной строки смещаемся на одну строку вниз и вставляем два раза скопированную строку
Rows(i).Offset(1, 0).Resize(2).EntireRow.Insert
Next i
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
MsgBox "Строки добавлены!", vbInformation, "Вставка строк"
End Sub
casag, добрый день! То есть, если в моём документе нужный мне массив начинается с ячейки A1, а не с B2, как в примере, то я должен поменять в шестой строке макроса ( lr = Cells(Rows.Count, "B") ) "B" на "A" и в седьмой строке ( For i = lr To 2 Step -1 ) "To 2" на "To 1", верно?
casag, и, соответственно, если необходимо изменить количество добавляемых пустых строк, я должен в десятой строке ( Rows(i).Offset(1, 0).Resize(2).EntireRow.Insert ) поменять значение "Resize()"?
Здравствуйте! Интересный вариант решения. А есть возможность его применения если выше диапазона находится "Шапка" которую не нужно обрабатывать? То есть применить данный макрос к диапазону, например с 3-й (или иной) строки?