Здравствуйте! Пример (файл прикреплен): Есть документ в котором несколько сотен строк. В течении дня возникает необходимость дублирования строк подряд (например с 121 до 140), делается вручную путем выделения всей строки (путем нажатия на номер строки) далее "Ctrl"+"С" далее "Ctrl"+"+". Строка вставляется ниже. Возможно как то упростить процесс? Все время необходимо продублировать разное кол-во строк. Читал форум, единственное предложение что нашел, было связано с фильтром и последующей сортировкой, но это не подходит так как документ фильтровать можно, но сортировать нельзя. В примере схематично показано как есть, и как необходимо сделать. Если макрос, то возможно не встраивать его в документ где нужна дубликация?
Каждую строку нужно повторить только один раз, количество строк, которые нужно продублировать всегда разное (например в документе 500 строк, нужно продублировать только строки с 401 по 408, потом строки с 37 по 39 и т.д.) при этом необходимо чтобы сохранялись значения в ячейках и формулы (как в ячейках J4, J5 и т.д.
З.Ы. Важно, чтобы дубликат добавлялся с помощью новой строки
В том то и дело, что нет закономерности. Опишу суть: есть документ, в нем шапка с атрибутами и непосредственно сами строки с данными. Сегодня изменилось значение в какой либо строчке, мне надо отобразить это изменение. Веделяется вся строка (именно строка, не только заполненные ячейки) потом строка копируется и вставляется через "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
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 /
В макрос Юрия добавьте строки, которые я обозначил словом добавить.
Код
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 раз больше чем я, а значит их совет будет полезнее.