Kezdőlap › Fórumok › Excel programozás › Autofilter multiple criteria – automatikus szűrés többszörös feltétellel
- This topic has 6 hozzászólás, 2 résztvevő, and was last updated 9 years, 8 months telt el by horvimi.
-
SzerzőBejegyzés
-
2015-03-24-17:30 #1982
Szép napot mindenkinek.
Az alapvető problémám a többszörös automatikus szűrésből fakad. Van egy listám, és makróval az egyik oszlopát szeretném leszűrni. Ez mindaddig nem okoz problémát, amíg egyetlen szűrési kritérium van.
Ez így néz ki:
ActiveSheet.Range(„AB:AG”).AutoFilter Field:=5, Criteria1:=a
A szűrési feltételként megadott „a” egy DATE vagy LONG típusú változó (azért ez a kettő, mert a szűrendő tartomány dátumokat tartalmaz, viszont számként tárolt dátumokat, és tapasztalatom szerint működik mindkét változó típus).
A gondom ott kezdődik, hogy a másik esetben nem egy diszkrét értékre történne a szűrés, hanem három értékre. A három érték szintén három változóban van tárolva (az egyszerűség kedvéért legyenek rendre: a, b, c; és a változók típusa ebben az esetben is DATE vagy LONG). A három változó három egymástól különböző dátum érték.
Kétféleképpen próbáltam meg definiálni a problémát:
1., vagy szűrök a három diszkrét értékre az alábbiak szerint
ActiveSheet.Range(„AB:AG”).AutoFilter Field:=5, Criteria1:=a, Operator:=xlAnd, Criteria2:=b, Operator:=xlAnd, Criteria3:=c, Operator:=xlFilterValues2., vagy megfordítom az egész probléma logikáját, és nem diszkrét értékekre szűrök, hanem egy adott értéknél nagyobb értékekre az alábbiak szerint
ActiveSheet.Range(„AB:AG”).AutoFilter Field:=5, Criteria1:=”>=a” Operator:=xlFilterValuesSajnos egyik esetben sem jutottam eredményre. Az első esetben sehogyan sem tudtam összekapcsolni több szűrési feltételt, miszerint mindegyik szerepeljen a szűrt eredmények között. Magyarán úgy nézzen ki a szűrt tartomány, mintha kézzel több rekordot jelöltem volna ki a legördülő listában, és azok alapján szűrtem volna.
A második esetben pedig (ami szerintem elegánsabb lenne) nem tudtam logikai feltételt megszabni szűrési feltételként. Ha „-jel közé teszem a logikai kifejezést, akkor szövegként értelmezi a változót, és az adott szöveget keresi (holott a változó diszkrét értéket tartalmaz), ha más módon próbálok meg feltételt deklarálni a Criteria1 számára, akkor az pedig eleve esélytelen, és nem fogadja el.
Próbáltam már több helyen utánaolvasni a témának, de nem találtam rá olyan megoldást ami működne. Külföldi fórumon az alábbi többszörös szűrési feltételt találtam, mint működő lehetőséget:
.AutoFilter Field:=1, Criteria1:=”HP Compaq 6000″, Operator:=xlOr, Criteria2:=”HP Compaq 8000″, Operator:=xlOr, Criteria3:=”HP Compaq 8200″, Operator:=xlOr, Criteria4:=”HP Compaq 8200 Elite”
de nálam ez a megoldás sem vezetett eredményre (xlAnd operatort használtam az xlOr helyett).
Tudna esetleg segíteni nekem valaki ebben a problémában? Esetleg tanácsot adni, hogy merre induljak tovább, vagy hogyan definiáljam máshogy a problémát, hogy eljussak egy működőképes eredményhez? Sokat gondolkodva a problémán, mindkét megoldás érdekelne amiket fentebb felvázoltam. Hátha később nem csupán 3 feltételt kell szűrnöm, így jól jöhet a logikai feltétel megfogalmazása is.
Segítségetek előre is köszönöm. További szép napot.Szabolcs
2015-03-24-17:53 #1983Most jutott eszembe, hogy az imént elfelejtettem csatolni a minta táblázatot.
Attachments:
You must be logged in to view attached files.2015-03-24-22:48 #1987Szia!
Ha több elemet jelölsz be az autoszűrőben, akkor azok egymással VAGY kapcsolatban vannak. (Ezt csak zárójelben mondom)
A problémával kapcsolatban, csak a nagyobb önállóság kedvéért, először azt kérdezném, hogy megpróbálad-e rögzítővel felvenni a többszörös szűrést?
Mert annak az eredményében elég egyértelmű, hogy mit is kellene tenni. (szerintem)
Ez a megoldás csak fix értékekre működik.ha relációkat szeretnél alkalmazni a feltételhez, akkor javaslom az irányított vagy speciális szűrőt használni, és azt lemakrózni.
Ennek az elméleti és gyakorlati része itt olvasható:
http://excel-bazis.hu/tutorial/feltetel-tartomany-halado-szureshez-es-adatbazis-fuggvenyekhezEz egy sorozat, érdemes tanulmányozni.
Ha sikerül ezzel megcsinálni, akkor a feltétel tartomány kézi létrehozása után a szűrést itt is rögzítővel javaslom felvenni, és tanulmányozni, módosítani a kódját.
Imre
2015-03-25-19:10 #1988Szép napot.
Mikor először elkezdtem behatóbban foglalkozni a makrózással, megismerkedtem a makró rögzítő funkcióval is (többek közt ezt is itt az oldalon láttam először). Ezt a módszert azóta is rendszeresen használom, és a rögzített makróból próbálom megérteni a gépi nyelv szintaktikai sajátosságait, és aztán át/megírni a saját verziómat.
Abban a megoldásban valóban az xlOr operátort használja a rendszer többszörös szűrési feltétel esetén. Az zavart meg, hogy ott szépen diszkrét értékeket tartalmaz a szűrési feltétel, amiket nem változóban tároltam előtte.
A második megoldásra köszönöm az ajánlást, át fogom tanulmányozni.
Az első esetre visszatérve csak, hogy érthetőbb legyen mi is a bajom, csatoltam néhány print screent (sajnos céges adatokat makróval nem küldhetek tovább, mert kapok érte).
Makró futás közben lekérdeztem közvetlen értékbehívás előtt a változókat:
ezek szépen hozzák is a várt eredményt. Azonban a szűrés befejeztével csupán egyetlen érték szerepel a szűrési tartományban:
Alább látható a szűrés deklarálása makróban (bár három változó van definiálva, de egyenlőre csak kettőt írtam bele… sajnos még így sem működik…):
Igyekszem önállóan megoldani egy feladatot, és nem sajnálom a tanulásra fordított időt sem, viszont nem szégyellek kérdezni sem. Bevallom őszintén, hogy nem értem miért nem működik normálisan…Szabolcs
2015-03-25-19:37 #1989Gyors update.
Ennyit jelent, ha az ember hangosan is kimondja amit gondol 🙂 Az utolsó kódsorban a b változó előtt rossz a Criteria. Helyesen:
A saját figyelmetlenségemen felbuzdulva gyorsan ki is egészítettem a harmadik feltétellel (immár rendesen):
Viszont itt nem akarja még mindig megadni magát:
Szabolcs
2015-03-25-21:50 #1990Jó estét mindenkinek.
Ebben a témában ez lesz az utolsó hozzászólásom, ígérem 🙂 Csupán szeretném közzétenni az egyik működő megoldást, amit sikerült eszközölni erre a feladatra.
Emígyen nézne ki:
– Lehet van aki számára egyértelmű – nekem nem volt az, ezért leírom – a többszörös szűrési feltétel Criteria1 és Criteria2 esetén szépen dolgozik ha diszkrét értékekről van szó (Criteria3-at nekem nem sikerült hozzáfűznöm).
– A három értékre történő szűrést egy tömbben definiálva és azt a Criteria1-ben megadva végeztem.
– A tömbben történő szűrési feltétel megadásánál ügyelni kell rá, hogy a tömb elemei stringek legyenek. Ha külső változóból szeretnék értéket meghívni, mint ahogy én is próbálkoztam, akkor a változót stringként kell definiálni.
– A tömbben tárolt változókra már gond nélkül tud szűrni (darabszámtól függetlenül, akár 1 darabos a tömb, akár véges sok számból áll).
Az alábbi képeken bemutatom az én működő kódsoromat:
Nem hagyott nyugodni, hogy nem találtam a megoldást, így elkezdtem minden szóba jöhető verziót végigjárni ami eszembe jutott. Ezt most a később érkezők segítésére írtam most le, hogy ha nekem már – végre valahára – működött, adhasson másnak is ötletet, mankót 🙂
Szabolcs
2015-03-26-01:18 #1991Szia!
Na, jól elbeszélgettél magaddal amíg meg nem oldottad.
Pont erre utaltam az elején, hogy rögzítővel nézted-e, mert a rögzítő a több feltételes autoszűrést úgy veszi fel, ahogy a megoldásodban szerepel, tehát egy tömbben definiálja a feltételeket.A három feltétel VAGY kapcsolata azért nem sikerült, mert nem lehet megcsinálni. Csak kettőnek van hely.
Imre
- A hozzászólás módosításra került: 9 years, 8 months telt el-horvimi.
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.