Добрый день!, подскажите, пожалуйста, как оптимизировать или переписать код. Требуется НЕ удалять строки, содержащие определенное значение. А остальные удалять. Код работает, но медленно и нужно запускать несколько раз Причем может удалить и нужные строки. Удаляет слово оставить, но не удаляет ОСТАВИТЬ, как это объяснить?)
[vba]
Код
Sub DeleteRows() Dim c As Range Dim SrchRng lr = Cells(Rows.Count, 1).End(xlUp).Row Set c = Range("A1:A3000").Find("Оставить", LookIn:=xlValues) For i = 1 To lr If Not Cells(i, 1).Value Like c Then Rows(i).Delete (xlShiftUp) Next i End Sub
[/vba]
Добрый день!, подскажите, пожалуйста, как оптимизировать или переписать код. Требуется НЕ удалять строки, содержащие определенное значение. А остальные удалять. Код работает, но медленно и нужно запускать несколько раз Причем может удалить и нужные строки. Удаляет слово оставить, но не удаляет ОСТАВИТЬ, как это объяснить?)
[vba]
Код
Sub DeleteRows() Dim c As Range Dim SrchRng lr = Cells(Rows.Count, 1).End(xlUp).Row Set c = Range("A1:A3000").Find("Оставить", LookIn:=xlValues) For i = 1 To lr If Not Cells(i, 1).Value Like c Then Rows(i).Delete (xlShiftUp) Next i End Sub
При удалении строк нужно отключать обновление монитора (это очень ускоряет). Удалять строки нужно снизу вверх.
[vba]
Код
Sub DeleteRows() Dim arr(), lr As Long, i As Long Application.ScreenUpdating = False lr = Cells(Rows.Count, 1).End(xlUp).Row arr() = Range("A1:A" & lr).Value For i = UBound(arr) To 1 Step -1 If arr(i, 1) <> "Оставить" Then Rows(i).Delete End If Next i Application.ScreenUpdating = True End Sub
[/vba]
При удалении строк нужно отключать обновление монитора (это очень ускоряет). Удалять строки нужно снизу вверх.
[vba]
Код
Sub DeleteRows() Dim arr(), lr As Long, i As Long Application.ScreenUpdating = False lr = Cells(Rows.Count, 1).End(xlUp).Row arr() = Range("A1:A" & lr).Value For i = UBound(arr) To 1 Step -1 If arr(i, 1) <> "Оставить" Then Rows(i).Delete End If Next i Application.ScreenUpdating = True End Sub
Karataev, нет, не это нужно, меня на форуме научили...) я сам могу... [vba]
Код
Sub deldrozd_r() For x = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 If Not Cells(x, 4).Value Like "Оставить" Then Rows(x).Delete (xlShiftUp) Next x End Sub
[/vba]
Мне нужно, чтобы если,например, "Оставить меня", "оставить это", "оставить и прочие сочетания String в значении ячейки, то строка НЕ удалялась. А остальные строчки, не содержащие слово оставить в тексте ячейки (текст может быть на несколько слов) удалялись.
Karataev, нет, не это нужно, меня на форуме научили...) я сам могу... [vba]
Код
Sub deldrozd_r() For x = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 If Not Cells(x, 4).Value Like "Оставить" Then Rows(x).Delete (xlShiftUp) Next x End Sub
[/vba]
Мне нужно, чтобы если,например, "Оставить меня", "оставить это", "оставить и прочие сочетания String в значении ячейки, то строка НЕ удалялась. А остальные строчки, не содержащие слово оставить в тексте ячейки (текст может быть на несколько слов) удалялись.ant6729