Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA AdvancedFilter - Dokładne filtrowanie

vatran 13 Mar 2015 11:53 906 7
  • #1 13 Mar 2015 11:53
    vatran
    Poziom 4  

    Witam

    W pętli wykorzystuję advancedFilter, przy kolejnym wywołaniu pętli zmienia się kryterium do filtrowania. Kryteria mają często podobny zapis, co niestety sprawia że pętla nie działa tak jak bym chciał. Tzn jako kryteria mam "a" i "aa", filtrując mi po "a'"nie odrzuca wyników dla "aa".

    Jak zrobić aby advamcedfilter filtrował dokładnie po takich kryteriach jakie dostaje, czyli chciałbym otrzymać taki efekt jak gdybym w standardowym filtrze szukaną frazę umieścił w cudzysłowie.

    0 7
  • #2 13 Mar 2015 15:05
    JRV
    Specjalista - VBA, Excel

    Umieścić tutaj kod VBA do analizy.

    0
  • #3 16 Mar 2015 12:00
    vatran
    Poziom 4  

    Wybaczcie że dopiero teraz ale w weekend byłem odcięty od internetu...

    Poniżej kawałek kodu odpowiedzialny za filtrowanie:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    A jeśli potrzebny cały program
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #4 16 Mar 2015 23:48
    clubs
    Poziom 29  

    vatran napisał:
    Tzn jako kryteria mam "a" i "aa", filtrując mi po "a'"nie odrzuca wyników dla "aa".


    jako kryteria wpisz tak ="=a" lub ="=aa"

    0
  • #5 17 Mar 2015 16:07
    vatran
    Poziom 4  

    Niestety kryterium nie wpisuję "na sztywno" w kodzie, tylko jest odczytywane z zadanego zakresu przy każdym wywołaniu. Próbowalem definicję całego zakresu ująć w "=" ale niestety tak nie działa.

    Próbowałem zdefiniować zakres dynamicznie, tzn

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    następnie kryterium określałem w ten sposób:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    jednak wtedy pojawiał się błąd: "Podany tekst nie jest prawidłowym odwołaniem ani zdefiniowaną nazwą

    0
  • #6 17 Mar 2015 16:54
    JRV
    Specjalista - VBA, Excel

    Jak Cells(n, m) nie puste, to m+1 nie działa, -

    vatran napisał:
    If Sheets("dane").Cells(n, m) = "" Then n = 2 m = m + 1

    0
  • #7 17 Mar 2015 21:50
    vatran
    Poziom 4  

    JRV napisał:
    Jak Cells(n, m) nie puste, to m+1 nie działa, -


    I o to chodzi : )

    Kryteria do filtrowania znajdują się w kilku kolumnach, które są położone obok siebie i mają różne długości.

    n- to numer wiersza
    m-numer kolumny

    n zwiększa się przed sprawdzeniem powyższego if, jeżeli w danej kolumnie już zostały sprawdzone wszystkie kryteria to cells(n,m) wpada na pustą komórkę, wtedy działa if tzn. zwiększany m-czyli przechodzimy do kolejnej kolumny natomiast n nastawiamy na 2 czyli pierwszy wiersz kolumny który zawiera kryterium (w n=1 jest tytuł kolumny)

    0
  • #8 18 Mar 2015 14:19
    vatran
    Poziom 4  

    Dzięki sugestią Clubs udało mi się znaleźć rozwiązanie. Co prawda wydaje mi się że ono nie jest optymalne ale działa. : )

    Jak zapisań dynamiczny zakres w CriteriaRange tak aby filtrowało dokładne wartości wciąż nie wiem, ale zauważyłem że jeżeli w komórce z której pobierane jest kryterium przed ciągiem znakowym znajduję się "=" to wszystko działa prawidłowo.
    Więc zastosowałem funkcję złącz teksty która łączyła "=" z kryterium.

    Zapis w VBA wygląda tak:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Dziękuje wszystkim za zainteresowanie tematem.

    0