Kako sam razumeo tvoj primer, osnovni problem je da ti ne filtriraš jedan opseg nego tri nezavisna opsega (iako se nalaze jedan pored drugog) - A:C, D:F i G:I. U tom slučaju potrebno je filter primeniti tri puta na svaki od opsega
Najbrže rešenje bilo bi preko AdvanceFiltera ali je potrebno da postoji header za podatke koji ja u tvom slučaju ne vidim. Naravno može da se doda privremeni header u VBA i onda obriše što ima smisla zavisno od veličinin Za primenu AdvanceFiltera preko VBA
pogledaj dobro objašnjenje na YouTube
Ja sam rešio tako što sam išao red po red kroz tvoj opseg i brisao šta treba izbaciti što je dosta sporije ali meni brže da napravim kod - rešenje je na listu filtrirano VBA. Kod je relativno jednostavan i može se koristiti ako lista pre filtriranja nije suviše dugačka
Code:
Private Sub RemoveLessThanZero(rng As Range, bycol As Integer)
' VBA kod koji brise ceo red iz zadatog opsega rng u kome je
' je celija u zadatoj koloni bycol 0 ili manja
' P. Jovanovic za eliteseturity.orf
'
Dim numcols As Integer
Dim r As Long
numcols = rng.Columns.Count
' Petlja kroz rng od dole na gore
For r = rng.Rows.Count To 1 Step -1
If rng.Cells(r, bycol).Value > 0 Then GoTo NextRow
'Brisu se celije iz istog reda
rng.Cells(r, 1).Resize(ColumnSize:=numcols).Delete Shift:=xlUp
NextRow:
Next r
End Sub
Public Sub FilterAll()
Dim rwLast As Long ' Poslednji red u trazenom opsegu
' Koristi se procedura brisanja za tri odvojena opsega
rwLast = ActiveSheet.Range("A1").End(xlDown).Row
RemoveLessThanZero ActiveSheet.Range("A1:C" & rwLast), 2
rwLast = ActiveSheet.Range("D1").End(xlDown).Row
RemoveLessThanZero ActiveSheet.Range("D1:F" & rwLast), 2
rwLast = ActiveSheet.Range("G1").End(xlDown).Row
RemoveLessThanZero ActiveSheet.Range("G1:I" & rwLast), 2
End Sub
Nije to loše Rembrante, samo što ne bi dodao još malo boje?