Kezdőlap › Fórumok › Excel programozás › Szűrés struktúrált hivatkozással
- This topic has 4 hozzászólás, 2 résztvevő, and was last updated 8 years, 11 months telt el by szsipos.
-
SzerzőBejegyzés
-
2015-10-20-21:07 #2296
Szép estét minden kedves erre tévedt érdeklődőnek.
Az alapötlet az, hogy van egy táblázatom, ami termékazonosítókat és a termékekhez kapcsolt információkat tartalmaz. Létrehozok egy oszlopvektort bizonyos elemekből majd elnevezem azt (ha jól tudom, ekkor strukturált hivatkozással tudom használni a tömböt bármelyik olyan képletben ahol az excel kezeli a strukturált hivatkozásokat). Célom makrózni a szűrést, ugyanis a tömb elemei olykor több száz elemet is tartalmazhatnak, és ezek az elemek napi szinten változnak. Mellékelek egy fájlt is, ott VBA szerkesztővel megnézhető a probléma kiindulási állapotában. A technikai részével nem boldogulok sajnos.
Bármilyen segítséget, tippet, trükköt, ötletet nagyon szívesen fogadok, és köszönök 🙂
További szép napot mindenkinek.Szabolcs
Attachments:
You must be logged in to view attached files.2015-10-22-00:14 #2298Szia!
Nagy nehezen azt hiszem felfogtam mit szeretnél. Előre megadnád egy tartományba, hogy mikre szűrjön, és egy makró ezt megcsinálná. Mivel a listád változik, ezért dinamikus névtartományba tennéd.
Ehhez pár dolgot helyre kell tenni.Először nézzük a dinamikus névtartományt.
Ehhez elég, ha egy tartományba kiírod a szűrendő elemeket, legyen egy tetszőleges fejléce, majd táblázattá alakítod, végül elnevezed a táblázatot. Ezek után ez a név követni fogja a tartományt.Másodszor nézzük a tömböket a VBA-ban.
Most csak röviden annyit, hogy ha scak egy dimenziós a tömböd, annak sornak kell lennie, nem oszlopnak. Emiatt a táblázatban lévő adatokat tranaszponálva kell betenni egy VBA tömbbe.Dim filter_array() As Variant filter_array = Application.Transpose(ActiveSheet.ListObjects("proba").DataBodyRange)
Harmadszor a szűrésről
ha rögzítővel felveszel egy autoszűrést, akkor azt látod, hogy a kijelölt elemek idézőjelek között lesznek. Ebből az következik, hogy az autoszűrés szöveges alapú, akkor is, ha számok vannak a szűrendő oszlopban. ez elég gáz, de úgy tűnik ez van.
Ezért ha számokra szűrnél, a tömb minden elemét szöveggé kell alakítani. Ráadásul 8 karakteres szöveggé, hogy a vezető nullákat se veszítsd el. Ez egy ciklus.For i = 1 To UBound(filter_array) 'convert to string filter_array(i) = Format(filter_array(i), "00000000") Next i
Ha ez megvan, akkor mehet az autoszűrés.
ActiveSheet.Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:=filter_array, Operator:=xlFilterValues
Az egészet visszatöltöttem egyben, kicsit átalakítottam.
Jelezz vissza, hogy OK-e!
Imre
Attachments:
You must be logged in to view attached files.2015-10-22-17:46 #2300Szia Imi
Hálásan és nagyon szépen köszönöm a segítséget. Ez egy igazán szép megoldása a problémának, szépen működik. Gondolkodtam én is a megoldáson, de nekem csak a logikai váz volt meg, hogy mit szeretnék, a technikai háttérrel még időnként nem boldogulok. Ezúttal is tanultam a tömbökről és a VBA-ról 🙂
Eszembe jutott még valami… Speciális szűrővel (Advanced filter) vajon működhetne a dolog? Vélemény?Szabolcs
- A hozzászólás módosításra került: 8 years, 11 months telt el-szsipos.
2015-10-22-22:46 #2302Szia!
Örülök, hogy működik.
Igen, működne irányított szűrővel is. Ott nem kellene alakítgatni a számokat szöveggé, és csak egymás alá beírkálnád a szűrendő elemek kódjait, csak figyelve arra, hogy szöveges legyen.
A kritérium tartománynál a dinamikus névtartomány kicsit módosul, mert itt kell a kritérium tartomány fejléce is.
Tablazatnév[#All] Táblázatnév[#Mind]
Imre
2015-10-23-02:21 #2303Szia Imi
Örülök a válaszodnak! Az utolsó kérdésem csak elméleti jellegű volt, ki még nem próbáltam. De jólesik a megerősítés, hogy működne, a gondolat a cikkeid közt böngészve született 🙂
Megcsinálom azt a verziót is, és elmentem magamnak, ki tudja. Később ha másért nem is, de a változatosság kedvéért és a problémamegoldás gyakorlására még jó lehet 🙂
Köszönöm még egyszer a segítséget!
ÜdvSzabolcs
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.