Есть макрос который добавляет строки перед определенным числом, помогите пожалуйста его изменить. Нужно чтобы макрос добавлял строки по условию. Есть число 10, нужно чтобы макрос нашел во 2м столбце первое число больше 10 (при условии что перед этим числом нет числа 10) и перед ним вставил пустую строку. И прописать, при возможности, в этой пустой строке во 2м столбце число 10. Ну и если это возможно сделать цикл не только для числа 10, а и для 15, 20.
Код
Sub Add_Row()
Dim sSubStr As String
Dim lCol As Long
Dim lLastRow As Long, li As Long
Dim lMet As Long
Dim arr
sSubStr = "10" 'Число
If sSubStr = "" Then lMet = 0 Else lMet = 1
lCol = "2" 'Столбец
If lCol = 0 Then Exit Sub
lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
arr = Cells(1, lCol).Resize(lLastRow).Value
Application.ScreenUpdating = 0
Dim rr As Range
For li = 1 To lLastRow
If -(InStr(arr(li, 1), sSubStr) > 0) = lMet Then
If rr Is Nothing Then
Set rr = Cells(li, 1)
Else
Set rr = Union(rr, Cells(li, 1))
End If
End If
Next li
If Not rr Is Nothing Then rr.EntireRow.Insert
Application.ScreenUpdating = 1
End Sub
ff48 написал: при условии что перед этим числом нет числа 10
Что означает перед этим числом? Пусть то самое больше число 12, номер строки - шесть. Если в строке пять нет 10, то выполняется вставка строки и запись 10? Пример - что должно получиться настолько сложно создать ручками?
Sub csg()
Dim i As Long, iCell As Range
Application.ScreenUpdating = False
For Each iCell In Range(Cells(2, "B"), Cells(Rows.Count, "B").End(xlUp))
For i = 10 To 20 Step 5
If iCell <> i Then
If iCell.Offset(-1, 0) < i And iCell > i Then
Rows(iCell.Row).Insert
iCell.Offset(-1, 0) = i
End If
End If
Next
Next
Application.ScreenUpdating = True
End Sub
ff48, Это зависит от того с какими числами вы будете работать. Вышеприведенный макрос работает с числами 10, 15, и 20, как вы и просили. То есть, если числа кратны, то через обычный цикл. Если просто набор бессистемных чисел, то эти числа можно взять в массив и также пройти циклом.