Telefonszámunk: 1-472-0679

Autofilter multiple criteria – automatikus szűrés többszörös feltétellel

Kezdőlap Fórumok Excel programozás Autofilter multiple criteria – automatikus szűrés többszörös feltétellel

7 bejegyzés megtekintése - 1-7 / 7
  • Szerző
    Bejegyzés
  • #1982
    szsipos
    Felhasználó

      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:=xlFilterValues

      2., 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:=xlFilterValues

      Sajnos 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

      #1983
      szsipos
      Felhasználó

        Most jutott eszembe, hogy az imént elfelejtettem csatolni a minta táblázatot.

        Attachments:
        You must be logged in to view attached files.
        #1987
        horvimi
        Adminisztrátor

          Szia!

          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-fuggvenyekhez

          Ez 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

          #1988
          szsipos
          Felhasználó

            Szé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:
            szűrési eredmény
            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…):
            makró kódsor
            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

            #1989
            szsipos
            Felhasználó

              Gyors 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:
              helyesen

              A saját figyelmetlenségemen felbuzdulva gyorsan ki is egészítettem a harmadik feltétellel (immár rendesen):
              rendesen
              Viszont itt nem akarja még mindig megadni magát:
              hiba
              hiba kódja

              Szabolcs

              #1990
              szsipos
              Felhasználó

                Jó 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:
                megoldás1

                megoldás2

                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

                #1991
                horvimi
                Adminisztrátor

                  Szia!

                  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.
                  Szűrés két feltétellel

                  Imre

                  • A hozzászólás módosításra került: 9 years telt el-horvimi.
                7 bejegyzés megtekintése - 1-7 / 7
                • Be kell jelentkezni a hozzászóláshoz.