Страницы: 1
RSS
Макрос для добавления пустых строк между строками с данными и дублирования в них содержимого
 
Приветствую!

  Существует задача в два этапа: необходимо 1) добавить по несколько пустых строк (а именно — по 3 штуки) после каждой строки с содержимым и 2) скопировать на них содержимое строк, после которых эти пустые строки были добавлены (по сути, дублировать данные по три раза).

  P. S. На форуме находил аналогичные вопросы и присланные по ним макросы, но они не соответствовали моим требованиям в полной мере, а поскольку я только начинаю своё знакомство с VBA, все мои попытки понять логику команд и адаптировать их под мой кейс приводили лишь к часам потраченного впустую времени (например, был макрос, который просто вставлял по одной пустой строке через одну и т. д.).

  Прикладываю к этой теме файл с примером того, что нужно сделать, и прошу, по возможности, кратко описать логику команд и как я могу подстраивать их под индивидуальные случаи в будущем (допустим, если возникнет необходимость вставить не по три пустые строки, а по две или четыре).
  Также прикладываю найденный мной на форуме макрос, о котором шла речь (ссылка на тему от 2008 года: https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=2635)

Спасибо!
Изменено: yeehaw - 20.08.2019 03:08:08
howdy y'all
 
"ДИСКЛЕЙМЕР"...такой текст-предупреждение пишется в самом начале, перед основным текстом или постановкой задачи. А вообще - стоит ли заменять нормальное слово на искаженную транскрипцию?

P.S.
Поменяли, но опять неудачно :)
Постскриптум, post scriptum, P.S. - после написанного
 
yeehaw, к вашему примеру
Код
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 - 20.08.2019 13:09:00
 
casag, добрый день! То есть, если в моём документе нужный мне массив начинается с ячейки A1, а не с B2, как в примере, то я должен поменять в шестой строке макроса ( lr = Cells(Rows.Count, "B") ) "B" на "A" и в седьмой строке ( For i = lr To 2 Step -1 ) "To 2" на "To 1", верно?
howdy y'all
 
yeehaw, Да, вы правильно поняли.
 
casag, и, соответственно, если необходимо изменить количество добавляемых пустых строк, я должен в десятой строке ( Rows(i).Offset(1, 0).Resize(2).EntireRow.Insert ) поменять значение "Resize()"?

Благодарен за помощь!
howdy y'all
 
yeehaw, Да, верно.  
 
Если интересно, то привожу решение на Power Query:
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    AddedIndex = Table.AddIndexColumn(Source, "Индекс", 0, 1),
    Custom1 = Table.Repeat( AddedIndex, Excel.CurrentWorkbook(){[Name="Нужно_добавить_строк"]}[Content]{0}[Column1] ),
    SortedRows = Table.Sort(Custom1,{{"Индекс", Order.Ascending}}),
    RemovedColumns = Table.RemoveColumns(SortedRows,{"Индекс"})
in
    RemovedColumns
Вот горшок пустой, он предмет простой...
 
Здравствуйте!
Интересный вариант решения.
А есть возможность его применения если выше диапазона находится "Шапка" которую не нужно обрабатывать?
То есть применить данный макрос к диапазону, например с 3-й (или иной) строки?
 
Konstanta, Добрый день. В макросе из поста 3 измените в строке
Код
For i = lr To 2 Step -1 
двойку на нужное вам число.Если укажите 3 , то макрос будет обрабатывать диапазон от последней занятой строки до третьей.
Изменено: casag - 18.02.2020 11:11:07
 
Спасибо!
Разобрался!
Работает.
Классное решение!!! Браво!
 
Добрый день.подскажите пожалуйста, а можно сделать. Чтобы этот макрос добовлял пустые строки, а не заполненные
 
добрый день!
Так он и добавляет пустые между заполненными
 
Цитата
Александр Авдяков написал:
а можно сделать. Чтобы этот макрос добовлял пустые строки
Код
Sub Add10
  Rows(10).Insert
End Sub
макрос добавляет пустую строку перед строкой 10
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх