Страницы: 1
RSS
Добавление пустых строк по условию, отредактировать макрос
 
Есть макрос который добавляет строки перед определенным числом, помогите пожалуйста его изменить.
Нужно чтобы макрос добавлял строки по условию. Есть число 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 - 01.09.2019 16:33:54
 
Доброе время суток.
Цитата
ff48 написал:
при условии что перед этим числом нет числа 10
Что означает перед этим числом? Пусть то самое больше число 12, номер строки - шесть. Если в строке пять нет 10, то выполняется вставка строки и запись 10? Пример - что должно получиться настолько сложно создать ручками?
Изменено: Андрей VG - 01.09.2019 19:16:21
 
Цитата
Андрей VG написал: Если в строке пять нет 10, то выполняется вставка строки и запись 10
Все верно. А если есть число 10, тогда идем дальше.
Изменено: ff48 - 01.09.2019 22:12:43
 
ff48, так, что ли?
Код
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
 
casag,
Разобрался, спасибо еще раз, мир не без добрых людей )
 
ff48, Это зависит от того с какими числами вы будете работать. Вышеприведенный макрос работает с числами 10, 15, и 20, как вы и просили. То есть, если числа кратны, то через обычный  цикл. Если просто набор бессистемных чисел, то эти числа можно взять в массив и также пройти циклом.
Страницы: 1
Наверх