[ Siki 5 @ 04.06.2020. 09:29 ] @
Neophodno je istovremeno filtriranje B,E i H kolone po kriterijumu ">0" počevši od 5 reda. Macro koji sam našao ne radi to u ovom slučaju kako treba. U listu Data Table se nalazi originalni macro. Očigledno da nisam ispravio makro kako treba. Pokušavao sam i sa advanced filterom ali nisam uspeo,nešto ja tu ne kapiram kako treba.Zahvalnost se podrazumeva.
[ pera68 @ 04.06.2020. 10:09 ] @
ovo sam uradio bez makroa, sa običnom formulom u dodatnoj koloni.
[ djoka_l @ 04.06.2020. 10:21 ] @
Ja sam skoro oslepeo gledajući u radni list.
[ Siki 5 @ 04.06.2020. 11:17 ] @
Hvala. Nisam bio dovoljno jasan, nije uslov da filtrira samo one redove u kolonama gde je svuda ispunjen uslov > 0. Potrebno je da izdvoji sve vrednosti u koloni B veće od 0,nezavisno od vrednosti u kolonama E i H u istom redu. Isto to važi za kolone E i H. Desno od tabele koja se filtrira je primer onoga šta treba dobiti.
[ Jpeca @ 07.06.2020. 08:09 ] @
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


[ Siki 5 @ 07.06.2020. 10:09 ] @
Najpre hvala. Ovo je pravo rešenje. Sad je problem vratiti tabelu u prvobitno stanje nakon što iskoristim filtrirane podatke odnosno "otkazivanje" filtera. U normalnom postupku se to postiže klikom na ikonicu za filter što posle pokretanja ovog makroa nije moguće.
[ Jpeca @ 07.06.2020. 20:12 ] @
Ideja ovog rešenja je da originalni podaci ostanu na posebnom listu, a da ovo filtriranje odradiš na kopiji. Ukoliko je potrebno i samo kopiranje na novi list može se odraditi u makrou.
Slično bi bilo i rešenje sa advance filterom - moraš da filtrirane podatake kopiraš van originalnog opsega.
Filtriranje u originalnom opsegu neće raditi jer se filtriranje vrši sakrivanjem celih redova, što ne odgovara u tvome primeru. Problem je što su ti opsezi jedan do drugog a filtriraju se nezavisno - to implicira da je možda organizacija podataka pogrešna.
[ Siki 5 @ 07.06.2020. 20:27 ] @
Mislim da sam razumeo kako da rešim problem. Hvala.