Я использую этот код для удаления диапазона, где определенная ячейка в последнем столбце (AA) этого диапазона равна переменной, указанной в другом месте на листе (К2).Код VBA для удаления диапазона на основе переменной - работает медленно
Код использует Shift: xlUp
для удаления этих данных и переноса остальной информации вверх.
Все это делается по одной строке за раз, пока условие больше не является истинным.
Единственная проблема заключается в том, что это выполняется довольно медленно - даже для 25-30 строк данных, удаляемых по одному за раз. Что я могу сделать, чтобы ускорить его?
Sub UncommitSession()
Dim WHAT_TO_FIND As String
Dim ws As Excel.Worksheet
Dim FoundCell As Excel.Range
Dim iVal As Integer
iVal = Application.WorksheetFunction.CountIf(Range("AA5:AA800"), Range("K2"))
WHAT_TO_FIND = Range("K2")
For i = 1 To iVal
Set ws = ActiveSheet
Set FoundCell = ws.Range("AA:AA").Find(what:=WHAT_TO_FIND, lookat:=xlWhole)
If Not FoundCell Is Nothing Then
Range("Q" & FoundCell.Row & ":AA" & FoundCell.Row).Delete Shift:=xlUp
Else
MsgBox (WHAT_TO_FIND & " not found in session archive.")
End If
Next i
End Sub
Вы попробовали 'Application.ScreenUpdating = False' в начале вашего кода? –
'application.calculation = xlmanualcalculation' затем код, затем вернитесь к автоматическому – user1
, возможно, если бы вы сохранили элемент в памяти (в виде массива), тогда выполните поиск по этому вопросу, вместо того чтобы искать объект диапазона листа, он может быть быстрее. Немного сложнее, но не имеет доступа к листу для поиска в каждой ячейке. – ClintB