Egyszerűbb táblázatok, kisebb listák esetén nem nagyon van értelme az ilyen automatizmusnak, de igazán komplex adathalmazok, felhasználói beavatkozást igénylő listák vagy éppen feltuningolt dashboardok esetén mindenképpen hasznos lehet egy olyan VBA-megoldás, amellyel felhasználó által kiválasztott paraméterek mentén automatikusan tudunk filterezni. A következő posztban erre mutatok egy egyszerűbb példát, amely az érdeklődők számára már jó kiindulási alap lehet további műveletek automatizálására.
Fogjuk a következő mintatáblánkat, amely megyénként és városonként tartalmaz bevételi értékeket - erre fogunk majd gyorsan egy kis automatikus szűrést varázsolni:
Ezután, bár nem létfontosságú, de célszerű beszúrni egy táblát a Ribbon Insert füle alatt található Tables szekció Table menüje segítségével a kis táblázatunkra, hogy később aztán könnyebben hivatkozhassunk rá:
Ha ezt megtettük, egyrészt megjelenik a Ribbonon a táblára használható Design fül, ahol egyrészt csinosítgathatjuk listánkat, másrészt itt láthatjuk azt is, hogy mostantól Table2 néven hivatkozhatunk majd rá (persze ez átírható bármi másra).
Következő lépésként döntsük el, hogy pontosan hogy is akarunk majd szűrést automatizálni, tehát például drilldown menüből válasszon majd a user és arra szűrjünk makróval vagy szövegboxba írja be a szükséges információkat stb.
Én most a példámban szövegboxba fogom bekérni az információkat (de ugyanezzel a logikával működik más elemekkel is), úgyhogy most szépen menjünk a Ribbon Developer fülére és a Controls szekcióban az Insert menü alól szúrjunk be két Active-X-es szövegdobozt, majd valami kis leírást is mellékeljünk, hogy mit is várunk ezekbe a dobozokba:
Vegyük észre, hogy a boxok beszúrásával a Controls szekcióban be is kapcsoltuk a Tervező (Design) módot, amelyre azért lesz szükségünk továbbra is, mert mindkét szövegboxunkat meg kell kicsit formáznunk. Kattintsunk jobb gombbal az egyiket kijelölve, majd a legördülő menüből válasszuk a Properties menüpontot:
Itt két dolgot tegyünk meg (tehetünk többet is, de maradjunk az egyszerű lépéseknél), egyrészt a BackColor tulajdonságnál válasszunk ki más háttérszínt (engem megőrjít a szimpla fehér) illetve a LinkedCell tulajdonságnál adjuk meg mondjuk a Q1 cellát:
Ezt ismételjük meg a másik szövegboxnál is, de ott Q2 cellát kapcsoljuk hozzá a mezőnkhöz. Ezután egyébként a Q oszlopot akár el is rejthetjük, hiszen ezekre a segédcellákra másoknak nem lesz szüksége (igen, tudom, hogy ez csak felesleges lépés, de haladjunk szépen lassan a folyamatok megértésében). Ezzel egyébként azt tettük, hogy a szövegboxainkba beírt értékek bekerülnek majd a Q1 illetve a Q2 cellákba.
A hangulat kedvéért még varázsoljunk egy gombot is a táblánk mellé szintén az Insert menüből a Command Buttonra való kattintással, majd utána ha már létrehoztuk, jobb gombbal itt is menjünk be Properties menübe, hogy legalább a Caption tulajdonságot módosítsuk és beírjunk valami szöveget a gombunkhoz, valahogy így:
Nagyjából most itt tartunk, sok már nincs hátra, hogy működőképes legyen az aprócska kis makrónk:
Innen jön a VBA-lépés, ahova úgy jutunk át legegyszerűbben, hogy jobb egérgombot nyomunk a gombunkon, majd a View Code menüre kattintunk:
Ezzel pedig létre is hoztuk a kattintás eseményt, azaz az eseményt, amely akkor fog bekövetkezni, ha userünk rákattint a gombra:
Innentől pedig már csak két lépés és két sornyi kód van hátra, méghozzá a következő kód két sorban és két verzióban:
ActiveSheet.ListObjects("Table2").Range.AutoFilter Field:=2, Criteria1:=[q1]
Mit is tesz ez a sor? Fogja Table2 tartományunkat az aktív sheeten (ha szimplán csak összeolvassuk a kód első részét, akkor is értelmezhető ez), majd tesz rá egy Filtert - ezután pedig szűrni fog a tábla második oszlopára (Field:= paraméter határozza meg) a Criteria1:= paraméternél megadott értékre, jelen esetben Q1 cellára, ahova az első szövegboxunkba beírt eredményt tároltuk be.
A másik sor a fentiek és a második szövegboxba kért információ alapján:
ActiveSheet.ListObjects("Table2").Range.AutoFilter Field:=3, Criteria1:=">[q2]"
Az aktív sheeten fogja Table2 táblánkat, tesz rá egy filtert, majd a tábla harmadik oszlopában le fog szűrni a kritériumban megadott paramétert teljesítő értékekre, azaz azokra, amelyek értéke nagyobb, mint a Q2 cella (figyeljünk rá, hogy Q2-ben számként legyen az értékünk!).
Most menjünk vissza az Excelhez, a Controls szekcióban kapcsoljuk ki a Tervező módot majd próbálgassuk csak művünket:
Ugye milyen izgalmas volt ez az egyszerű feladat, ha még nem mélyedtünk el VBA-ban?
Csak okulásként álljon itt egy lista a táblákkal kapcsolatos egyéb VBA-parancsokról, amelyet mindenképpen használjunk fel egy kis gyakorlásra szobánk áldásos magányában: