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

  • ulrik19

    tag

    válasz Pulsar #5843 üzenetére

    Csak azért, hogy mások számára is hasznos legyen a téma :)

    Csináltam egy bővített vlookup() függvényt...
    Használata pl:
    =multivlookup($E$1:$N$100;3;0;1;A1;4;B1/2;10;"Béla")
    ahol:
    $E$1:$N$100 a keresés helye (mint vlookup)
    3, azaz a tábla 3. oszlopában lévő adatot adja vissza
    0, azaz ha nem talál semmit, 0-t adjon vissza. (lehet "" is akkor üresen marad, de bármi más szintén mehet ide)
    ez a három kötelező paraméter
    ez után lehet megadni a feltételeket az alábbi módon (a fenti példát követve)
    párosával kell nézni a paramétereket:
    1;A1 azaz a tábla 1. oszlopában A1-gyel egyenlő érték legyen (természetesen nem csak hivatkozás lehet itt)
    4;B1/2 azaz a tábla 4. oszlopában a B1 cella értékének felét keresse
    10;"Béla" azaz a tábla 10. oszlopában a "Béla" szöveg legyen
    lehet 1, de akár több feltételt is belerakni, rugalmasan kezeli
    Ha több sor is megfelelne a feltételnek, akkor az első találatot adja vissza
    (a paraméterek között ÉS kapcsolat van, tehát mindnek meg kell felelni)

    Public Function multivlookup(HolKeressen As Range, MelyikOszlopAdatatAdjaVissza As Byte, HaNincsTalalat As Variant, ParamArray OszlopInformaciok() As Variant) As Variant
    'Ha nem páros számú az OszlopInformaciok argumentum (az UBound elemszám-1 értéket ad vissza ilyenkor)
    If (UBound(OszlopInformaciok) + 1) Mod 2 = 1 Then
    'adjon vissza hibát
    multivlookup = CVErr(1)
    Exit Function
    End If

    Dim i As Integer, j As Integer, ok As Boolean
    For i = 1 To HolKeressen.Rows.Count
    ok = True
    For j = 0 To UBound(OszlopInformaciok) Step 2
    'ha nagyobb oszlopszám a hivatkozás, mint ahány oszlop egyáltalán van...
    If HolKeressen.Columns.Count < OszlopInformaciok(j) Then
    'adjon vissza hibát
    multivlookup = CVErr(2)
    Exit Function
    End If
    'ha nem felel meg a feltételnek, akkor ok = False (ne is vizsgálja ezt az adatsort tovább...)
    If HolKeressen.Cells(i, OszlopInformaciok(j)) <> OszlopInformaciok(j + 1) Then
    ok = False
    Exit For
    End If
    Next j

    'ha van találat, akkor ok = True (ne is menjen tovább, mert az első találot adatom vissza)
    If ok Then
    multivlookup = HolKeressen.Cells(i, MelyikOszlopAdatatAdjaVissza)
    Exit Function
    End If
    Next i

    'ha volt találat, akkor már kiléptünk a függvényből... ha nincs, akkor:
    multivlookup = HaNincsTalalat
    End Function

    [ Szerkesztve ]

    ...az élet igazságos, mert pl. akinek rövidebb az egyik lába, annak hosszabb a másik...

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