Výuka a školení Excelu Výuka a školení Excelu Výuka a školení Excelu
Výuka a školení Excelu Výuka a školení Excelu

neděle 14. února 2010

SVYHLEDAT / VLOOKUP - funkce pro propojování více tabulek

Příklad

Potřebuji z jedné tabulky doplňovat hodnoty do druhé. Nebo, jinými slovy - potřebuji propojit dvě tabulky.



V tomto případě ve vzorové tabulce potřebuji doplnit do sloupečku "Cena za kus" ceny z malé tabulky vpravo.
Např. u čokolády chci doplnit do buňky C5 cenu 12 Kč, která odpovídá čokoládě, u oplatky 8 Kč atd. Mohl bych to udělat ručně, ale u velkých tabulek by to bylo nepřiměřeně zdlouhavé.
Upozorňuji na nově vypsaný listopadový kurs Excelu. Školí se středně pokročilá látka, výuka probíhá v malých skupinkách. 
Více informací zde.

Návod

Pomůže mi funkce, která se jmenuje SVYHLEDAT (anglicky VLOOKUP).
Do buňky C5 vpíši:

=SVYHLEDAT(B5;E4:F9;2;0)
  • "=" začíná každou funkci
  • "SVYHLEDAT" je název funkce
  • "B5" proto, že v této buňce je slovo "čokoláda" - slovo, podle kterého má Excel v pravé tabulce najít příslušnou cenu.
  • "E4:F9" proto, že v této oblasti je umístěna tabulka, ze které se vybírá.
  • "2" proto, že z malé tabulky, ze které se vybírá, se má doplnit hodnota, která je ve druhém sloupečku, což je sloupeček "Cena/ks".
  • Poslední parametr je obvykle nula. Jednička se zadává v případech podobných tomuto.
Pokud chci funkci zadat přes formulář (Vložit - Funkce...), vypadá zápis takto:



Než funkci, zadanou do buňky E5, roztáhnu na další řádky, musím doplnit pevné (absolutní) odkazy a funkce pak vypadá takto:

=SVYHLEDAT(B5;$E$4:$F$9;2)

Zafixoval jsem druhý parametr - oblast tabulky, ze které se vybírá. Dělám to proto, že tato tabulka zůstane úplně stejná pro všechny řádky a při roztahování se nemá měnit.

Výsledek je takovýto:




Poznámky:
  • Kdyby tabulka, ze které se vybírá, byla "obrácená" (stejně jako tabulka vpravo dole u výsledné tabulky), použil bych místo funkce SVYHLEDAT funkci VVYHLEDAT a ve třetím parametru by bylo číslo řádku místo čísla sloupce (v tomto případě je to tak jako tak dvojka), jinak se obě funkce používají obdobně.
  • Jak si pamatovat názvy funkcí? "S" na začátku názvu funkce SVYHLEDAT je odvozené od slova "Svisle", "V" na začátku názvu funkce VVYHLEDAT je odvozeno od slova "Vodorovně".
  • V anglické verzi se funkce jmenují VLOOKUP a HLOOKUP (vertical / horizontal).
  • Uvedené funkce nahrazují "joinovací" dotaz přes dvě tabulky, se kterým se setkáváme v databázích, ale v excelu se jinak než popsanými funkcemi uskutečnit téměř nedá.
  • Běžně nejde dohledávat hodnoty ze dvou tabulek (v mém případě nemohu mít dva ceníky a přiřazovat z obou současně). Dá se to obejít např. použitím funkce IFERROR (CHYBHODN), která vypadá takto: =CHYBHODN(SVYHLEDAT(B5;$E$4:$F$9;2;0);SVYHLEDAT(B5;odkaznadruhoutabulku;2;0))
    Dá se to přeložit jako "vyhledej hodnotu v první tabulce, a když tam není, vyhledej v druhé tabulce", takže logicky pokud je hodnota v obou, má přednost první tabulka.
  • Každá tabulka může být v jiném listu - pak stačí standardně upravit odkaz.
Chcete-li si stáhnout tabulku, uvedenou v tomto článku, klikněte zde.
Procvičení tématu:

55 komentářů:

  1. Výborný návod, děkuji Ti.
    Konečně jsem pochopil k čemu je funkce SVYHLEDAT dobrá.

    OdpovědětVymazat
  2. jak se dělá to ukotvení? nevím kde ten znak najít poř. jakou klávesovou zkratku použít :-(

    OdpovědětVymazat
  3. Ahoj,
    jsou dvě možnosti:
    Buď klikneš na ten odkaz, který chceš ukotvit, v horní řádce, a zmáčkneš klávesu F4. Tím tam ty "dolary" přibudou.
    A nebo se přepneš na anglickou klávesnici (např. zmáčknutím levého Alt a Shift současně nebo v pravém dolním rohu obrazovky) a pak Shift a současně čtyřku v horní řadě.
    Více a podrobněji zde:
    http://www.excelentnitriky.com/2010/01/absolutni-odkazy.html

    OdpovědětVymazat
  4. Klobouk dolů před autorem, krásně vysvětlené.
    Díky těmto stránkám je hned excel zábavnější a snazší :)

    OdpovědětVymazat
  5. $ - AltGR + ů na české klávesnici - samozřejmě, že každý kdo pracuje s excelem více, používá F4. Při opakovaném stisknutí F4 měníme hodnotu absolutního odkazu - tj.
    1. jedno stisk - řádek i sloupec
    2. dva stisk - jenom sloupec má absolutní hodnotu
    3. troj stisk - jenom řádek má absolutní hodnotu
    4. čtvrtý stisk opět odemyká řádek i sloupec
    Pá :-)))
    K tomu "IF/Když - podrobně" - očekával bych spíše obšírnější vysvětlení vložených IF a zákonitosti jejich vyhodnocování - poukázat na časté chyby a jejich eliminaci. To prosím není kritika, ale spíše návrh jak ještě více pomoci začínajícím uživatelům. Jinak je váš web rozhodně přínosem.

    OdpovědětVymazat
  6. dik za vyborne vysvetlenie, sice tato funkcia pre mna nebola nova, ale tu skratku s F4 som nepoznal - super

    OdpovědětVymazat
  7. Souhlasím, funkce je praktická. Má však jedno úskalí. Při dodatečném vložení sloupce do prohledávané oblasti se nepřepočte parametr Sloupec a funkce začne vracet něco jiného, než jsme původně chtěli. Co by se dalo zapsat do parametru takového, aby po vložení sloupce do oblasti Excel zvětšil hodnotu o jednu a současně při vložení sloupce před prohledávanou oblast nechal vše být?

    OdpovědětVymazat
  8. Nevím jestli úplně přesně rozumím.
    Nicméně asi bych to udělal tak, že bych někam mimo zapsal funkci, která vyhodí číslo sloupce některé z buněk v prvním sloupci prohledávané tabulky, např. =column(A1), do jiné buňky pak číslo některé buňky z posledního sloupce tabulky.
    Do třetí buňky bych tahle dvě čísla odečetl a tuto třetí buňku použil jako parametr Sloupec (asi bude třeba z ní ještě něco odečíst).
    Myslím, že to může fungovat.

    OdpovědětVymazat
  9. Ano, teď je to funkční! Jestliže mám matici B1:D4, mohu prohledávat =SVYHLEDAT(B3;B:D;3;0) a k hodnotě v B3 mi vzorec vrátí hodnotu v D3. Pokud chci přidávat sloupce před nebo do oblasti, abych nemusel vzorec neustále opravovat, mohu ho zapsat takto =SVYHLEDAT(B3;B:D;SLOUPEC(D1)-SLOUPEC(B1)+1;0). Škoda, že tohle nemají ošetřené...

    OdpovědětVymazat
  10. Narazil jsem na jeden problém:

    Když v pravé tabulce s cenami změním položky následovně:
    čokoláda 50g
    čokoláda 100g

    a následně v levé tabulce prodejů zadám do jakéhokoliv řádku čokoláda 50g, tak se mi cena doplní správně, ale když zadám čokoláda 100g, tak se mi cena nevyplní a objeví se ni #N/A.

    Netušíte někdo jak tento problém vyřešit?

    OdpovědětVymazat
  11. To by mělo normálně fungovat, myslím, že máte někde nějaký překlep...

    OdpovědětVymazat
  12. Žádný překlep, zkuste si to nasimulovat. Zkoušel jsem to několikrát v Excelu 2003 i v OpenOffice a výsledek stejný. Konkrétně jsem místo čokolád použil hodnoty EVO48PCB a EVO192PCB se stejným výsledkem. Na čokolády jsem to převedl pro lepší představivost, s tím že jsem to zkoušel přímo na této uvedené tabulce :o(

    OdpovědětVymazat
  13. Tak mi to pošlete na adresu uvedenou pro doučování...

    OdpovědětVymazat
  14. Tohohle problému se týká tento bod článku:

    Nejsou-li položky v "malé" tabulce seřazené podle abecedy, zadejte nulu do čtvrtého, volitelného parametru funkce.

    OdpovědětVymazat
  15. tak tuhle poznamku jsem taky potrebovala zduraznit :D, uz mi to bezi vyborne, diky autorovi

    OdpovědětVymazat
  16. Dobrý den, mám problém potřeboval bych poradit zda je teda vůbec možný z těchto čísel pomocí nějakého vzorce vytáhnout vždy poslední čísla před pomlčkou. čísla ve sloupečku v bunkách a jsou tam i mezery. dávám 3 příklady
    33 54 791 4 004-8 další v bunce 33 54 791 4 015-4 a další v bunce 33 54 791 4 022-0 a ted potřebuji pomocí nějakého vzorce či pomocí nějakých kroků docílit aby se zase do dalšího sloupce napsalo tady to 4004 pod to do bunky 4015 pod to do bunky 4022
    předem děkuji za odpověď chotik

    OdpovědětVymazat
  17. Pro Váš problém je to takto:
    =CONCATENATE(ČÁST(A1;11;1);ČÁST(A1;13;3))
    Bližší vysvětlení viz popisy funkcí "Část" a "Concatenate".

    OdpovědětVymazat
  18. A co v situaci, kdy mám dvě tabulky, ve kterých potřebuju data vyhledávat? Bylo by možné nějak vyřešit tuhle situaci? Tuším, že půjde o konstrukci s IF a VLOOKUP, ale konkrétní realizace se mi nedaří :-(

    OdpovědětVymazat
  19. Dobrý den, nevím, jak to myslíte, popište přesně, co chcete dělat.

    OdpovědětVymazat
  20. Řekněme, že mám 3 tabulky. V primární tabulce mám identifikátory (třeba čokoláda, bonbony, želé atd.). Do řádků k nim potřebuju dodat ceny. Ty jsou pod stejnými identifikátory umístěny v dalších 2 tabulkách. Problém je, že čokoláda a bonbony jsou v jedné tabulce, želé ve druhé.

    Potřebuji tedy prohledat obě tabulky, pomocí identifikátorů spárovat obsah z obou a dosadit ceny do primární tabulky.

    Řešení, že bych druhou a třetí tabulku spojil dohromady není reálné (dostal bych se s počtem záznamů nad 1 mil.)

    OdpovědětVymazat
  21. To jste kouzelník. Parádní zdroj informací :-) Bohužel Access neovládám.

    OdpovědětVymazat
  22. Jak myslíte, ale tohle jsou přesně věci, které se v Accessu řeší mnohem rychleji, intuitivněji a není třeba žádné velké učení.

    OdpovědětVymazat
  23. Dobrý den,
    chtěla bych se zeptat, jestli existuje nějaká možnost, jak sloučit data ze 2 tabulek s použitím více parametrů. Příklad - mám 2 tabulky s daty o jménech zaměstnanců, názvech projektů (kdy každý zaměstnanec pracuje na více projektech) a měsících, kdy pracovali. V jedné tabulce jsou k těmto datům přiřazeny počty odpracovaných hodin, ve druhé tabulce jejich úvazky. Tyto 2 tabulky bych potřebovala sloučit tak, abych měla ve výsledné tabulce Jméno, Název projektu, Měsíc (=> tato data jsou v obou tabulkách), Počet odpracovaných dnů v daném měsíci a na daném projektu, Úvazek v daném měsíci a na daném projektu.
    Děkuji za radu :)

    OdpovědětVymazat
  24. No, jestli máte i web Accessní triky, tak si rád nechám poradit :). Zatím je pro mě ale Access jedna velká neznámá.

    OdpovědětVymazat
  25. Děkuji :) zkusila jsem to obejít vytvořením 2 pivot tabulek a sloučením těchto 2 tabulek do jedné, zatím to funguje :)
    Hezký den

    OdpovědětVymazat
  26. ...jinak pokud jsou tabulky jen dvě, dá se to asi sfouknout tímhle vzorcem přes funkci IFERROR:
    =IFERROR(SVYHLEDAT(B5;$H$7:$I$9;2;0);SVYHLEDAT(B5;$K$7:$L$8;2;0))
    Říkám tím:
    Když v první tabulce nenajdeš (hodnota je chybová), podívej se do druhé.

    OdpovědětVymazat
  27. Dobrý den,
    děkuji za perfektní vysvětlení, jen bych ještě potřebovala vychytat ještě jednu věc. Nejde nějak obejít to pravidlo "prvního sloupce tabulky"? Tzn. že mam napr. sloupce Titul, Jmeno, Prijmeni a potřebuji tyto údaje doplnit do jiné tabulky dle Příjmení - nebo to proste musím všechno přeházet, tak, aby bylo nejdříve Příjmeni poté jméno a pak titul? Jak postupovat, když potřebuji hledat podle více sloupců? Např. pokud by bylo pro několi lidí shodné příjmení, tak abych měla jistotu tím, že např. přidám ještě vyhledávání dle sloupce jméno. Potřebovala bych, aby ta fce vypadala nejak takto SVYHLEDAT(Novotný+Jan;tabulka H2:J34 (jm., prijmeni,zamestnani);3,0). Snad je to aslespon trochu srozumitelne. Diky Jana

    OdpovědětVymazat
  28. Dobrý den, tohle už je trochu oříšek a musel bych se nad tím zamyslet. Jestli chcete, pošlete mi soubor mailem (třeba s anonymními daty). Jestli půjde vyřešit, pošlu vám vyřešený soubor a vy mi pošlete na účet cca dvě stovky.
    Hezký den,
    J.

    OdpovědětVymazat
  29. Dobrý den,velice si cením návodů v těchto stránkách a rád bych se na Vás obrátil s prosbou o radu.Funkce SVyhledat na mé tabulce se po zadání vzorce objeví HODNOTA NENÍ K DISPOZICI,což mě užírá,protože mám vše do puntíku stejně jak je v návodu.Tušíte,v čem by mohla být chyba?

    OdpovědětVymazat
  30. To vypadá na nějaký překlep... nevím, pošlete soubor.

    OdpovědětVymazat
  31. Vzorec patri do bunky E5 a nie F5. Inac diky!

    OdpovědětVymazat
  32. Dobrý den, mám dotaz, jak použít funkci svyhledat, když mám tabulku o 3 sloupcích, v prvním je datum, ve druhém kurz v EUR a ve třetím kurz v USD. D8le mám druhou tabulku, kde mám částku v měně (USD, EUR,CZK), měnu a datum zdanitelného plnění (datum kurzu). Nějak mi ale nejde připojit první tabulku ke druhé, aby mi to vypsalo vždy kurz k příslušné měně a datu. Děkuji za odpověď

    OdpovědětVymazat
  33. Dobrý den, jedním z řešení je zadat tři různé funkce SVYHLEDAT a s použitím funkce KDYŽ vybrat, která bude použita.

    OdpovědětVymazat
  34. no a pokud mam problem ze z puvodni tabulky potrebuji vyhledavat podle parametru prodano kusu a dostat zpet co to bylo za zbozi ? (typicky bych chtel treba vedet ktereho zbozi bylo prodano nejvice, ale tabulku mam razenou podle datumu a nechci ji radit jinak, ale chci si vytahnout dejme tomu tri nejprodavanejsi druhy zbozi)

    OdpovědětVymazat
  35. no a pokud mam problem ze z puvodni tabulky potrebuji vyhledavat podle parametru prodano kusu a dostat zpet co to bylo za zbozi ? (typicky bych chtel treba vedet ktereho zbozi bylo prodano nejvice, ale tabulku mam razenou podle datumu a nechci ji radit jinak, ale chci si vytahnout dejme tomu tri nejprodavanejsi druhy zbozi)

    OdpovědětVymazat
  36. Dobrý den,
    je možné, že pokud potřebuju Vlookup hodnoty z druhého souboru, bude mi ta funkce vyhazovat N/A i když při ručním vyhledávání mám v obou tabulkách shodné hodnoty? Jaký vliv má kompatibilita souborů, nebo to, že "čerpaná" tabulka už obsahuje Vlookup data z dalšího souboru?

    OdpovědětVymazat
  37. Dobrý den, umím odpovědět jen na jednu otázku - to, že "čerpaná" tabulka už sama čerpá odjinud vliv nemá.

    OdpovědětVymazat
  38. Dobrý den, chtěl bych se zeptat jestli je možné nějak nahradit #N/A jako výsledek hledání za číslo popř. bez hodnoty. Vyhledávám v tabulce která vždy neobsahuje všechny hledané výrazy.

    OdpovědětVymazat
  39. Viz tady:
    http://www.excelentnitriky.com/2012/01/funkce-iferror.html

    OdpovědětVymazat
  40. Dobrý den mám takový dotaz, funguje mi podle návodu vše správně, jde ale nějak zařídit pokud bych chtěl například v první tabulce všechny hodnoty vynulovat? Druhá tabulka vypadá tak, že mám jen jeden řádek kam zadávám název a podle něj se vyhledává a v prví tabulce má každý řádek jiný název. první tabulka: název , data - druhá tabulka: dolním název a data a doplní se do celé tabulky první. děkuji

    OdpovědětVymazat
  41. Dobrý den, rád bych se Vás zeptal a požádal o pomoc. Potřebuji aby se mi do buňky (třeba)"D1" promítnul text (hodnota výpočtu) z příslušného řádku (buňky), který odpovídá parametru v buňce "A1" (tam bych rád zadal číslo patřičného řádku). Řádky jsem si čísloval 1,2,3,...200 ve sloupci A, ale když použiji do "D1" vzorec : =SVYHLEDAT($A$1;$A$4:$A$11111;4) napíše se mi "REF!". Používám verzi 2000 a tuším že někdy dříve se mi stalo že vzorec s hodnotou prostého čísla nefungoval a pomohlo až když jsem k číslu přidal nějaké písmeno (např. 1a,2a,..). Předem moc díky za radu.

    OdpovědětVymazat
  42. Dobrý den,
    zkuste opravit vzorec takto:
    =SVYHLEDAT($A$1;$A$4:$A$11111;4;0)
    a když to nepomůže, pošlete mi soubor na beranjiri25@gmail.com.
    J.

    OdpovědětVymazat
  43. Dobry den
    jak dostanu z jedne tabulky do druhe cenu a nazev, aby se to doplnovalo do druhe tabulky ? predem dekuji :)

    OdpovědětVymazat
  44. Dobry den
    jak dostanu z jedne tabulky do druhe cenu a nazev, aby se to doplnovalo do druhe tabulky ? predem dekuji :)

    OdpovědětVymazat
  45. Dobrý den, super návod, moc mi pomohl. Díky.

    OdpovědětVymazat
  46. To není problém - jen musíte mít sloupec s názvy měsíců až za sloupcem za tím, podle čeho hledáte. Čili přeskládat sloupečky - přičemž pamatujte, že pokud si nechcete tabulku zpřeházet, můžete použít sloupečky skryté.

    OdpovědětVymazat
  47. Zdravím. Děkuji za výborné návody, ale bohužel se mi nedaří vyřešit můj problém. Mám jednu hlavní tabulku, do které chci dle výběru dvou veličin (podmínek) načítat data z jiných tabulek. Tj., aby se mi vždy zkopírovali data z řádku nějaké tabulky dle podmínek. Př.: v prvním sloupci zadám 1, vybere se tabulka s indexem 1. V dalším sloupci zadám A a z té vybrané tabulky 1 bude tahat řádek, který bude mít stejný název (A). Zkoušel jsem to řešit pomocí funkce když, ale přišlo mi to hodně kostrbaté. Díky za každou pomoc.

    OdpovědětVymazat
  48. Možná by to šlo nějakou kombinací IF a INDIRECT...

    OdpovědětVymazat
  49. Dobrý den,
    používám funci SVYHLEDAT v jednom sešitu na různých listech a funkce funguje špatně (nevyhledá se vše). Pokud použiji SVYHLEDAT z různých sešitů vše funguje bez problémů. Kde může být problém?

    Moc Děkuji
    Tomáš

    OdpovědětVymazat
  50. Třeba v datových typech. Ujistěte se, že neporovnáváte např. texty s čísly. J.

    OdpovědětVymazat
  51. Dobrý den, jak prosím využít funkce VLOOKUP, když kritérium vyhledávání je v bunce matice pouze část textu. Např. kritérium vyhledávání je písmeno B, podoba bunky v matici je však A|B|C. Děkuji

    OdpovědětVymazat
  52. Dobrý den,
    nerozumím přesně, nicméně obecně si zřejmě budete muset kromě VLOOKUP pohrát i s funkcemi ČÁST, ZLEVA, CONCATENATE...
    Pokud chcete, pošlete příklad na info@excelentnitriky.com.
    J.

    OdpovědětVymazat
  53. Objevte eToro, největší sociální investiční síť na světě, kde 1,000,000y klientů vydělávají kopírováním obchodních rozhodnutí našich nejlepších obchodníků.

    Připojte se k úspěchu - Spojte se s více než 4,000,000 investorů a obchodníků ze 170 zemí

    Otevřené obchody na eToro - 227,651,647

    OdpovědětVymazat