Kezdőlap › Fórumok › Excel programozás › Szűrés struktúrált hivatkozással › Hozzászólás: Szűrés struktúrált hivatkozással
Szia!
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