Új hozzászólás Aktív témák

  • Mutt

    senior tag

    válasz nova001 #18973 üzenetére

    Hello,

    ...akarok egy lenyiló listát amibe abc sorrendbe vannak a nevek és ha elkezdek gépelni kidobja a javaslatot ?? vagy valami ehhez hasonlo...

    Ha fontos, hogy gépeléskor már feljöjjön a javaslat, akkor csakis ActiveX combobox-al oldható meg a feladat.
    VBA-val megoldható, hogy dinamikus tartományból ABC sorrendben legyen feltöltve a combobox.

    Ha elég hogy egy legördülő listából válasszon a felhasználó, akkor viszont az Adatérvényesítés is működik.

    Ehhez az eredményhez kell pár előkészület:
    1. Javasolt dinamikus tartományokat létrehozni, hogy a képletek rövidebbek legyen és kezeljék az újonnan bevitt adatokat.
    A példámban 3 db dinamikus tartományt definiáltam.
    Az első a bementi listát adja vissza, neve EredetiLista.
    Képlete: =ELTOLÁS(Munka1!$B$2;0;0;DARAB2(Munka1!$B:$B)-1)
    A második a bemeneti lista ABC sorrendjét adja vissza, neve ABCSorrend.
    Képlete: =ELTOLÁS(Munka1!$C$2;0;0;DARAB2(Munka1!$B:$B)-1)
    A harmadik pedig a végeredményt, ABC sorrendben az egyedi értékeket mutatja, neve: ABCLista
    Képlete: =ELTOLÁS(Munka1!$D$2;0;0;DARABTELI(Munka1!$D:$D;">""")-1)

    2. Ezek után kezdhetjük az ABC sorba rendezést, ehhez a DARABTELI függvény használható.
    A képlet ennyi: DARABTELI(bemeneti tartomany;"<"&vizsgált cella).
    Ez megmondja hogy a vizsgált cella hanyadik a tartományban ABC sorrend szerint. pl. 2 azt fogja jelenti, hogy van előtte 2 találat.
    A C2-es cellába ez a képlet menjen: =MAX(DARABTELI(EredetiLista;"<"&EredetiLista))
    Ezt a képletet jó sokszor le kell másolni, hogy minden elem biztosan le legyen ellenőrzíve.

    3. A C-oszlopban tehát visszakapjuk a sorrendet, de mivel az eredeti listában is lehet ismétlődés ezért a sorrendben is lesznek azonos értékek. Ezért mielőtt megkeressük a legkisebb sorszámot ezt a listát ismétlődés mentessé kell tenni. Ehhez a Gyakoriság függvény használható fel többek között, a megoldásban a ABCSorrend/(GYAKORISÁG(ABCSorrend;ABCSorrend)>0) állítja elő a kívánt eredményt.

    Megvan az egyedi sorrend, így már csak sorban ki kell olvasni növekvő értékben a számokat, Ez tipikusan a KICSI függvénnyel oldható meg. A megoldásomban az ÖSSZESÍT függvény paraméterezésével hívtam meg a KICSI függvényt, ennek az az előnye, hogy a hibás adatokat az ÖSSZESÍT függvény ki tudja automatikusan hagyni nem kell plusz képleteket beírnom.

    Végre tehát megvan a sorrend, vagyis {0;1;2;3;4;5}. Innen már könnyen csak ki kell iratnom azt a cégnevet amely a 0 mellett található a B oszlopban. Ehhez az INDEX függvényt és a HOL.VAN-t használtam.

    A fentiek alapján állt elő ez a hosszú képlet a D2-es cellában:
    =HAHIBA(INDEX(EredetiLista;HOL.VAN(ÖSSZESÍT(15;6;ABCSorrend/(GYAKORISÁG(ABCSorrend;ABCSorrend)>0);SOROK(D$2:D2));ABCSorrend;0));"")
    Ezt is jó sokat le kell másolni a D-oszlopban.

    Készen is vagyunk, már csak egy adatérvényesítést kell megadnunk az egyik cellára, a listának a ABCLista függvényt használva.

    A fentiek egyrésze Mike Girvin ötletén alapul!

    üdv

Új hozzászólás Aktív témák