ten nawiązywał do innego komentarza, ale można spróbować czegoś takiego.
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
Nie testowałem tego i to z pamięci, więc może to wymagać trochę szczypanie, ale powinien otrzymać pracę bez zapętlenie przez tysiące wierszy. Musisz usunąć 11-Jul, aby UsedRange
był poprawny lub zmienić offset na 2 wiersze zamiast 1 w .Offset(1,0)
.
Generalnie, przed wykonaniem .Delete
uruchomię makro z .Select
zamiast Usuń w ten sposób, mogę być pewien, że poprawny zakres zostanie usunięty, co może być warte zrobienia, aby sprawdzić, czy odpowiedni zakres jest usuwany.
Czy wypróbowałeś jakiś kod (są ** bardzo ** wiele przykładów na tej stronie, jak usuwać wiersze za pomocą VBA), a jeśli nie, to czy rozważałeś sortowanie, a następnie usuwanie sąsiedniego zakresu, który dla dużych objętości może być w każdym razie szybszym? – pnuts
Istnieje odpowiedź, która jest prawie dokładnie tym, czego szukasz. Po prostu trzeba zmodyfikować kryteria autofiltra. [Wydajny sposób na usunięcie całego wiersza, jeśli ...] (http://stackoverflow.com/a/16901714/138938) –