Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 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 Авг 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 Авг 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
Вот горшок пустой, он предмет простой...
Страницы: 1
Читают тему (гостей: 1)
Наверх