Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: Посетитель от 20 августа 2017, 14:28

Название: Excel VBA Макросы. Удалить строки с определенным значением с помощью макроса.
Отправлено: Посетитель от 20 августа 2017, 14:28
Есть две колонки ("A","B") по 220 строк. Надо удалить строки целиком, если в колонке "B" стоит определенное значение - 0 или "Занято".

Я написал макрос, но при удалении первого попавшегося значения 0 или "Занято" строки смещаются, и на место, например, строки 2 становится строка 3, где тоже значение "0". Но макрос уже переходит к следующей строке. Следовательно макрос приходится прогонять несколько раз чтобы удалить все.

Как сделать так, чтобы все строки удалялись за один прогон?
Название: Re: Excel VBA Макросы. Удалить строки с определенным значением с помощью макроса.
Отправлено: Администратор от 20 августа 2017, 14:41
Перед удалением строк нужно отключить обновление монитора, это очень существенно ускоряет макрос.
Также можно отключить пересчёт формул, если много формул и макрос медленно работает.

Макрос
Sub DeleteRows()
   
    Dim i As Long
   
    Application.ScreenUpdating = False
   
    For i = 220 To 2 Step -1
        If Cells(i, "B").Value = 0 Or Cells(i, "B").Value = "Занято" Then
            Rows(i).Delete
        End If
    Next i
       
End Sub
[свернуть]
Название: Re: Excel VBA Макросы. Удалить строки с определенным значением с помощью макроса.
Отправлено: Посетитель от 20 августа 2017, 14:55
Сработало. Благодарю за помощь!