Это упоминалось в другом комментарии, но вы могли бы попробовать что-то вроде этого.
Sub FilterAndDelete()
Application.DisplayAlerts = False
With Sheet1 'Change this to your sheet name
.AutoFilterMode = False
.Range("A3:K3").AutoFilter
.Range("A3:K3").AutoFilter Field:=5, Criteria1:="none"
.UsedRange.Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Delete
End With
Application.DisplayAlerts = True
End Sub
Я не проверял это, и это из памяти, поэтому может потребоваться некоторые настройки, но он должен получить работу без зацикливания через тысячи строк. Вам нужно будет удалить 11-июля так, чтобы UsedRange
был правильным или изменил смещение на 2 строки вместо 1 в .Offset(1,0)
.
Как правило, перед тем, как я сделаю .Delete
Я буду запускать макрос с .Select
вместо Delete таким образом. Я могу быть уверен, что правильный диапазон будет удален, что может быть полезно сделать, чтобы проверить, удаляется ли соответствующий диапазон.
Вы пробовали какой-либо код (на этом сайте есть ** очень много примеров на удаление строк с помощью VBA), а если нет, рассмотрели ли вы сортировку, а затем удалили смежный диапазон, который для больших томов может все-таки быстрее? – pnuts
Существует ответ, который почти точно вы ищете. Вам просто нужно изменить критерии для автофильтра. [Эффективный способ удаления всей строки, если ...] (http://stackoverflow.com/a/16901714/138938) –