Макрос Excel VBA для удаления строк, если определенная строка больше 0 для очень большого листа - PullRequest
0 голосов
/ 21 октября 2019

Я все еще очень плохо знаком с созданием макросов, и у меня возникают проблемы с поиском макроса, который может удалить целые строки данных для электронной таблицы, которая может варьироваться по размеру, но, как правило, может содержать около 100 тыс. Строк.

Условие - если ячейка (в данном случае что-либо в строке 'AN') больше 0, то удалить всю строку.

В настоящее время я пытаюсь использовать что-то вроде ниже, но Excel, похоже, не нравится код из-за размера электронной таблицы, так как он никогда не закончится.

    last = Cells(Rows.Count, "AN").End(xlUp).Row
            For i = last To 2 Step -1
                If (Cells(i, "AN").Value) > 0 Then
                Cells(i, "AN").EntireRow.Delete
        End If
    Next i

Есть ли другой способ написания кода, чтобы он не создавал особых трудностей при попытке обработать 100 тыс. Строк данных?

Спасибо!

1 Ответ

0 голосов
/ 21 октября 2019

Вы можете попробовать это для экономии вычислительной мощности. Он отключает определенные функции, которые не нужны во время работы макроса, а затем снова включает их. Существуют более сложные способы проверки настроек, их сохранения и последующего восстановления, но это, как правило, основы.

Private Sub TurnOffFunctions()

    Application.ScreenUpdating = False
    Application.DisplayStatusBar = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False

End Sub

Private Sub TurnOnFunctions()

    Application.ScreenUpdating = True
    Application.DisplayStatusBar = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True

End Sub

Sub DeleteRows()

Call TurnOnFunctions

    last = Cells(Rows.Count, "AN").End(xlUp).Row
            For i = last To 2 Step -1
                If (Cells(i, "AN").Value) > 0 Then
                Cells(i, "AN").EntireRow.Delete
        End If
    Next i

Call TurnOffFunctions

End Sub
...