Страницы: 1
RSS
Дублирование различного числа строк
 
Здравствуйте!
Пример (файл прикреплен):
Есть документ в котором несколько сотен строк. В течении дня возникает необходимость дублирования строк подряд (например с 121 до 140), делается вручную путем выделения всей строки (путем нажатия на номер строки) далее "Ctrl"+"С" далее "Ctrl"+"+". Строка вставляется ниже.
Возможно как то упростить процесс? Все время необходимо продублировать разное кол-во строк.
Читал форум, единственное предложение что нашел, было связано с фильтром и последующей сортировкой, но это не подходит так как документ фильтровать можно, но сортировать нельзя.
В примере схематично показано как есть, и как необходимо сделать.
Если макрос, то возможно не встраивать его в документ где нужна дубликация?
Изменено: mos_art - 01.02.2017 16:45:17
 
Нужен признак - сколько раз повторить. См. ячейки J1 и I1.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Каждую строку нужно повторить только один раз, количество строк, которые нужно продублировать всегда разное (например в документе 500 строк, нужно продублировать только строки с 401 по 408, потом строки с 37 по 39 и т.д.) при этом необходимо чтобы сохранялись значения в ячейках и формулы (как в ячейках J4, J5 и т.д.

З.Ы. Важно, чтобы дубликат добавлялся с помощью новой строки
Изменено: mos_art - 01.02.2017 17:12:29
 
Как узнать, какие именно строки копировать? От чего зависит?
 
В том то и дело, что нет закономерности. Опишу суть: есть документ, в нем шапка с атрибутами и непосредственно сами строки с данными. Сегодня изменилось значение в какой либо строчке, мне надо отобразить это изменение. Веделяется вся строка (именно строка, не только заполненные ячейки) потом строка копируется и вставляется через "Ctrl"+"+". Получается две полностью одинаковые строчки, не меняется ни форматирование, ни содержание ячеек, то есть сохраняются все формулы в этих строчках и не едут формулы по всему документу. И потом я уже помечаю старую строку, а в новую вношу изменение.
 
И что собственно надо, чтобы при выделении строк(и) само строку ниже  добавило? Или Вы в конце дня сами ищете изменения и добавляете строки, и надо это автоматизировать?
 
Ник Никитич, наверно не совсем корректно отписался я в сообщении выше. Есть документ со строками, мне поступает информация извне, что поменялось какое-то значение. Мне надо это изменение внести в документ, но при этом не просто поменять одно на другое а, оставить старую строку, создать новую путем дублирования и в новой уже поменять значение, старая строка при этом остается (я просто помечаю символами что эта срока старая, а эта новая что бы в дальнейшем пользователь, к которому уйдет документ мог видеть какие значения были, то есть старая строчка, и новые, то есть новая строчка).
Просто порой за день необходимо внести 200-300 изменений и каждый раз в ручную добавлять копии строк занимает много времени. И собственно вопрос, можно ли как то (например макросом) сделать так: я выделяю например 3 строки, запускаю макрос и он добавляет 3 новых строк, но не так, что 3 строки было и он добавил просто 3 строки ниже, то есть было
1
2
3
стало
1
2
3
1.1
2.1
3.1
а надо так: что было
1
2
3
а стало
1
1.1
2
2.1
3
3.1
Просто порой строк за раз так надо продублировать 30-50
 
Я не знаю правильно ли я Вас понял, и сильно ли поможет...
Код
Sub VS()
Dim rng As Range
Dim i As Integer
Dim a As Integer
Dim y As Integer
Dim z As Integer

    Set rng = Selection
        If Selection.Cells.Count < 256 Then
            MsgBox "Не выделена строка!"
        Else
            i = rng.Rows.Count
            y = rng.Rows(1).Row
            z = rng.Rows(i).Row
                For a = z To y Step -1
                    Rows(a).Copy
                    Rows(a + 1).Select
                    Selection.Insert Shift:=xlDown
                Next a
        End If
End Sub
Изменено: Ник Никитич - 03.02.2017 21:27:26
 
Я бы ещё посоветовал прикрутить это дело к Worksheet.SelectionChange, тогда достаточно выделить строку(и), и они автоматически скопируются
 
Вариант:
Код
Sub Macro1()
Dim i As Long, StartRow As Long, FinishRow As Long
    StartRow = Selection.Row
    FinishRow = Selection.Row + Selection.Rows.Count - 1
    For i = FinishRow To StartRow Step -1
        Rows(i + 1).Resize(1).Insert
        Rows(i).Copy Cells(i + 1, 1)
    Next
End Sub
 
Попробовал оба варианта, работают. Проверил в работе немного, вроде все как-надо. Спасибо большое!

З.Ы. Скажите, можно макрос чуть модернизировать? Сделать так, чтобы строки сразу помечались в столбце "С"?
то есть были строки:
1
2
3
Стали строки
1        
1.1
2
2.1
3
3.1
И при этом в столбце С по этим строкам проставились символы "*" и "/" вот так:
1           *
1.1        /    
2           *
2.1        /
3           *
3.1        /
Изменено: mos_art - 06.02.2017 12:53:52
 
В макрос Юрия добавьте строки, которые я обозначил словом добавить.
Код
Sub Macro1()
Dim i As Long, StartRow As Long, FinishRow As Long
    StartRow = Selection.Row
    FinishRow = Selection.Row + Selection.Rows.Count - 1
    For i = FinishRow To StartRow Step -1
        Rows(i + 1).Resize(1).Insert
        Rows(i).Copy Cells(i + 1, 1)
        Cells(i, 3).Value = "*" ' добавить
        Cells(i + 1, 3).Value = "/" ' добавить
    Next
End Sub
 
Ник Никитич, спасибо Вам. Вы очень помогли. Можете посоветовать какой-нибудь сборник/справку для начинающих по макросам? Я даже значение команд не понимаю, чтобы самостоятельно решать собственные проблемы
 
Я бы с радостью, но ещё забанят за рекламу, поэтому, надеюсь, модераторы Вам подскажут. Да и книг они прочли в 10 раз больше чем я, а значит их совет будет полезнее.
 
Почитайте, к примеру Д.Уокенбаха, а лучше желание самому писать и доступ к интернету :)
«Бритва Оккама» или «Принцип Калашникова»?
 
Ник Никитич, а можете мне написать сразу на E-mail, благо функционал сайта позволяет
Изменено: mos_art - 06.02.2017 16:16:18
 
На этом форуме, много полезного можно приобрести, помогая другим...
«Бритва Оккама» или «Принцип Калашникова»?
Страницы: 1
Читают тему
Наверх