28. 10. 2014

Vyhledávací funkce pro Excel

Je tomu už asi rok, kdy jsem zjistila, že Excelu chybí jistá funkce pro pokročilejší vyhledávání i když funkcí na vyhledávání má několik, ale žádnou která by uměla prohledat sloupec který chci, vrátit výsledky v pořadí v jakém si určím a z daného sloupce.



Pustila jsem se do vývoje vlastní funkce která tohle všechno umí a po dlouhém testování (pomohl mi i jeden člen fóra PC-Help kterému se ta funkce taky hodila) jsem ji dovedla téměř k dokonalosti.

Funkce se vloží do modulu v editoru VBA který se spustí klávesovou zkratkou Alt+F11
Výsledný sešit se pak musí uložit jako "sešit s podporou maker" a v Excelu je potřeba mít povolená makra.


Function NajdiVice(Hledat As Variant, Oblast As Range, Prohledat_sloupek As Integer, Vzit_sloupek As Integer, Poradi As Integer) As Variant
' funkce na vyhledání položky v zadaném sloupci a v zadaném pořadí
' **** vysvětlivky funkce ****
' Hledat = co hledat
' Oblast = oblast dat (tabulka) kde hledat a vybírat výsledky
' Prohledat_sloupek = číslo sloupce v oblasti dat který se má prohledat
' Vzit_sloupek = číslo sloupce ze kterého se bude brát výsledek hledání
' Poradi = pořadí výsledku který má najít
' ****


Dim a As Long, x As Integer
x = 1
With Oblast
    For a = 1 To .Rows.Count
        If .Cells(a, Prohledat_sloupek) = Hledat Then
            If x = Poradi Then
                NajdiVice = .Cells(a, Vzit_sloupek) 'vrací nalezenou hodnotu
                Exit Function
            Else
                x = x + 1 'počítadlo pořadí shody
            End If
        End If
    Next
End With
NajdiVice = CVErr(xlErrNA) 'vrátí chybu N/A když nenajde shodu
End Function


 Příklad použití výpisu položek podle stejného ID.

Zápis vzorce s průvodcem.
Funkce v editoru VBA vč. vysvětlivek (zelený text na začátku funkce)

Ukázkový soubor ke stažení

4 komentáře:

  1. Ahoj,

    velice mě zaujala Tvá prezentovaná funkce na vyhledávání, která by mi, tuším, mohla vyřešit to, o co mi jde…

    Můžu se zeptat, zda-li bys mi byla ochotná pomoci, prosím? Tuším totiž, že to, co bych potřeboval, by „hráčce“ jako ty ;) nemělo dělat většího problému a v podstatě se jedná o drobnou úpravu Tvého kódu, kterou bych ale já nejspíš zmastil.

    Jde v podstatě o jednoduchou věc – a myslím, že jsi s tím už pomáhala někomu na (myslím) PC-help (soupis objednávek atd.) s právě tou drobnou úpravou. Jde mi o „přehled“ objednávek na základě data. Tedy, na základě předpokládaného TD objednávky + 7 dní předem „upozornit“ výpisem objednávek, které mají právě takové datum – více by vysvětlil právě soubor. + třeba proklik na řádek… Makra, dotazy apod. nevadí (zatím)…

    Rád bych v souvislosti s tím požádal o kontakt na mail (slancar@post.cz) pro odeslání sešitu s daty, se kterými bych potřeboval pomoci. Sem nejdou vkládat přílohy… 

    Za reakci předem velice děkuji, Stanislav Šlancar

    OdpovědětVymazat
  2. Dobrý den,
    narazil jsem na podobný problém, jen bych potřeboval vyhledávání ještě trochu více poupravit a vylepšit. Nechci to zadarmo. Je možné se s Vámi nějak zkontaktovat? Můj e-mail: checkboy @ gmail . com

    OdpovědětVymazat
  3. Ahoj, tak funkce je naprosto genialni. Mam ale jeden problem. Udelal jsem vse jak popisujete. Kdyz vzorec zadám, funguje skvěle. Nevím ale proč, když změním zdroj, nedojde automaticky k přepočtu. U vašeho souboru ano, u mého ne. Nevíte, čím by to mohlo být?

    OdpovědětVymazat
    Odpovědi
    1. Ahoj, napdá mě jediné, vypnutý automatický přepočet.
      Jinak můžeš třeba zkusit vytvořit úplně nový sešit a do něho vložit tvoje data a moji funkci. Pokud to nepomůže, tak nevím.

      Vymazat