mjohn Posted August 23, 2011 Posted August 23, 2011 Sziasztok Excel felhasználók! Egy adatbázisból szeretnék adatokat szûrni meghatározott kritériumok alapján (az autoszûrés nem nyújt megfelelõ megoldást). Az elképzelésem a következõ: "A" munkalapon található az adatbázis - ennek az egyik oszlopa a dátum. Ebbõl az adatbázisból szeretnék adatokat (lehetõleg egész sorokat) "B" munkalapra szûrni (egy elõre elkészített fejléc alá) a megadott kritérium alapján. A fejléc része lenne egy lenyíló fül is, ahol a kritériumokat lehetne kiválasztani, a dátum alapján pl.: 1 lehetõség: 1-6 nap a lejáratig, 2. lehetõség: 7-10 nap a lejáratig stb. Szóval egy adatbázisból szûrne az excel egy másik munkalapra. Gyakorlatilag hasonlóra lenne szükségem, mint az autoszûrõ de mégsem A lényege ugyanaz - mindig csak azok a tételek jelenjenek meg a "B" munkalapon, amelyekre érvényes a kritérium. Tud valaki megoldást a problémára? Nagyon megköszönném. Köszi elõre is mindenkinek.
KGigi Posted August 23, 2011 Posted August 23, 2011 Ha már van egy adatbázis, akkor sokkal egyszerûbb lenne futtatni egy lekérdezést, és annak az eredményét exportálni az Excelbe. Nem tudom, az Excel ezt meg tudja-e oldani makró nélkül. De annál meg lényegesen egyszerûbb egy lekérdezés.
arpsoft Posted August 24, 2011 Posted August 24, 2011 De ha nagyon szeretnél makrót írni, akkor valami ilyesmire lesz szükséged. (Nem elenőriztem le) Sub Szures() ' a másoláshoz használt számláló j = 1 ' töröljük a B oldal tartalmát, a fejléc kivételével (feltételezve, hogy az A-S tartományban vannak az adataid) Sheets("B").Select Range("A2:S" + Str(ActiveSheet.UsedRange.Rows - 1)).ClearContents 'itt van a feltétel cSzuroMezo = "T1" 'kiválasztjuk az A oldalt Sheets("A").Select ' végig megyünk az összes soron, de nyilván van fejléc, amit kihagyunk For iSor = 2 To ActiveSheet.UsedRange.Rows ' ez a változó tárolja, hogy másolni kell-e a sort bMehet = False ' kiértékeljük a feltételnek megfelelő cellákat. Minden feltételhez egy case sor tartozik Select Case Sheets("B").Range(cSzuroMezo).Value Case 1: bMehet = (Cells(iSor, 2).Value - Now() < 6) Case 2: bMehet = (Cells(iSor, 2).Value - Now() < 10) End Select If bMehet Then ' ha megfelel a sor, akkor másoljuk. Egyet léptetünk a B oldal sor számlálóján j = j + 1 ' kijelöljük az A oldalon az aktuális sort Range(Str(iSor) + ":" + Str(iSor)).Select ' vágólapra rakjuk Selection.Copy ' átmegyünk a B oldalra Sheets("Munka2").Select ' kiválasztjuk az új sor első celláját Cells(j, 1).Select ' beszúrjuk a vágólap tartalmát ActiveSheet.Paste ' visszamegyünk az A oldalra Sheets("A").Select End If Next ' átkapcsolunk a B oldalra és kiválasztjuk a bal felős sarkot Sheets("B").Select Cells(1, 1).Select End Sub
mjohn Posted August 24, 2011 Author Posted August 24, 2011 (edited) A lekérdezéses módszer sajnos nem megoldható. Jelenleg egy modell építek, amely automatikusan kezel néhány funkciót (szóval kiválogat adatokat adott kritérium alapján). A makróhoz sajnos nem igazán értek De ha esetleg Te megtudnád oldani makróval, és leírnád ennek pontos menetét, nagyon örülnék neki, és megpróbálnám ezt az utat. Mindenesetre köszönöm szépen a véleményedet. Éppen küldte a kolléga :-) Köszi :-) Mindenképpen megpróbálom, de azért még várnék potenciális megoldási lehetõségeket a többi excel haladó felhasználótól. Edited August 24, 2011 by mjohn
fitneebee Posted February 14, 2013 Posted February 14, 2013 Sziasztok Excel guruk! Sajnos az eredeti kérdéshez nem tudok okosat mondani, viszont kérdezni szeretnék szűrés témában. Ki kellene szűrnöm egy excel adatsorból a hiányzó értékeket. Az adatsor szerkezete olyan, hogy 1-33 között nagyság szerint rendezve növekednek az értékek, csak éppen nem minden érték 1x fordul elő. Van 4 db 1-es, aztán 2 db 2-es, aztán 4 db 3-as, és kezdődik a ciklikusság elölről, azaz 4 db 4-es, 2 db 5-ös, 4 db 6-os, 4 db 7-es , stb. A szűrésnek azt kellene kidobnia, hogy melyik szám az 1-33 között nem fordul elő egyszer sem a növekvő sorozatban. Ötlet?..
Temporary Posted February 14, 2013 Posted February 14, 2013 @fitneebee Be tudnál tenni egy képet a táblázatról? @mjohn Kevésbé elegáns megoldás mint arpsoft kollégáé, de hátha valakinek hasznos: Készítesz egy segédoszlopot az adatbázisba, amibe kiszámítod hogy az adott rekord (sor) melyik lejárati tartományba esik. Rögzítesz makrókat, amik egy-egy lejárati tartományra leszűrik az adatbázist és az eredményt átmásolják a másik munkalapra. Columns("A:D").Select 'adatokat tartalmazó oszlopok kijelölése Selection.AutoFilter ActiveSheet.Range("$A$1:$D$21").AutoFilter Field:=4, Criteria1:="=2", _ Operator:=xlOr, Criteria2:="=3" ' Ahol a negyedik oszlopban a kettes vagy a hármas van azokra a sorokra szűr Range("A1").Select 'CTRL+HOME Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 'SHIFT+CTRL+END Selection.Copy 'CTRL+C 'Szűrt adatokat tartalmazó tartomány kijelölése és másolása Sheets("Munka3").Select 'átváltás az eredményt majd tartalmazó munkalapra Range("A1").Select ActiveSheet.Paste 'szűrt adatok beillesztése
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now