Jump to content
mjohn

Excel szûrés - haladó

Recommended Posts

mjohn

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.

Share this post


Link to post
Share on other sites
KGigi

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.

Share this post


Link to post
Share on other sites
arpsoft

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

Share this post


Link to post
Share on other sites
mjohn

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 :nem: 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 by mjohn

Share this post


Link to post
Share on other sites
fitneebee

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?..

Share this post


Link to post
Share on other sites
Temporary

@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

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...