1. Nestandardní techniky práce s vyhledávacími funkcemi



Podobné dokumenty
Microsoft Office. Excel vyhledávací funkce

Vyhledávací a databázové funkce v MS Excel Martin Tůma

Excel Asistent Magazín 06/2003

EXCELentní tipy a triky pro mírně pokročilé. Martina Litschmannová

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

Tabulkový procesor. Základní rysy

FUNKCE 3. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý. Vzdělávací oblast: Informatika a výpočetní technika

Excel Asistent Magazín PREMIUM 03/2005

Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49

kontakt: Excel Asistent Magazín 06/ pojmenované oblasti a funkce Jiří Číhař jiricihar@dataspectrum.cz

Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Efektivní práce s Excelem (středně pokročilí uživatelé)

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Excel tabulkový procesor

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Obr. P1.1 Zadání úlohy v MS Excel

Přílohy. Příloha 1. Obr. P1.1 Zadání úlohy v MS Excel

DUM 06 téma: Tvorba makra pomocí VBA

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Nové kreativní týmy v prioritách vědeckého bádání CZ.1.07/2.3.00/ Tento projekt je spolufinancován z ESF a státního rozpočtu ČR.

Excel Asistent Magazín 07/2003

Excel Asistent Magazín 03/2003

Řazení řádků ve vzestupném pořadí (A až Z nebo 0 až 9) nebo sestupném pořadí (Z až A nebo 9 až 0)

Dotazy tvorba nových polí (vypočítané pole)

Algoritmizace a programování

Evidence technických dat

Střední škola informačních technologií a sociální péče, Brno, Purkyňova 97. Vybrané části Excelu. Ing. Petr Adamec

Test z programování v jazyce VBA v rámci předmětu Počítače II Vzorová zadání a vypracování

Excel tabulkový procesor

VÝŘEZ OBLASTI BUNĚK VZORCEM

Základní vzorce a funkce v tabulkovém procesoru

Relativní a absolutní adresa buňky, pojmenování buňky/rozsahu

Inovace výuky prostřednictvím šablon pro SŠ

Využití tabulkového procesoru MS Excel

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Excel tabulkový procesor

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

6. blok část C Množinové operátory

Excel 2007 praktická práce

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Registrační číslo projektu: Škola adresa: Šablona: Ověření ve výuce Pořadové číslo hodiny: Třída: Předmět: Název: MS Excel II Anotace:

IMPORT DAT DO DATABÁZE

DUM 01 téma: Obecné vlastnosti tabulkového editoru, rozsah, zápis do buňky, klávesové zkratky

V článku Skrytý obsah na listu (1) jsme se zabývali obecnými možnosti skrývání obsahu. Dnes se na dané téma podíváme prakticky.

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

Stěžejní funkce MS Excel 2007/2010, jejich ovládání a možnosti využití

Visual Basic for Application

VZORCE A VÝPOČTY. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý

MANUÁL K PROGRAMU JEDNODUCHÝ SKLAD (VER-1.2)

2. popis prostředí, nastavení pracovní plochy

Mgr. et Mgr. Jan Petrov, LL.M. Ph.D. BYZNYS A PRÁVO

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

P ílohy. P íloha 1. ešení úlohy lineárního programování v MS Excel

Vzorce. StatSoft. Vzorce. Kde všude se dá zadat vzorec

DATABÁZE MS ACCESS 2010

Soukromá střední odborná škola Frýdek-Místek, s.r.o. VY_32_INOVACE_03_IVT_MSOFFICE_02_Excel

Základní orientace v MS Excel

24 Uživatelské výběry

8. Formátování. Úprava vzhledu tabulky

KAPITOLA 11 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Jak definovat pravidlo pro více buněk naráz

Analýza a prezentace dat

PRACOVNÍ SEŠIT MS EXCEL KOMPLET. Optimálním doplňkem stálého vzdělávání jsou elektronické kurzy.

2. cvičení z ZI1 - Excel

Microsoft Excel. Základní operace s buňkami. Formát buňky

FUNKCE 2. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý. Vzdělávací oblast: Informatika a výpočetní technika

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

JAK DEFINOVAT PRAVIDLO PRO VÍCE BUNĚK NARÁZ

Zadání soutěžních úloh

MS Excel Základy maker. Operační program Vzdělávání pro konkurenceschopnost. Projekt Zvyšování IT gramotnosti zaměstnanců vybraných fakult MU

1. Průběh funkce. 1. Nejjednodušší řešení

Rotace, transpozice a zrcadlení matice hodnot

František Hudek. červen 2012

ZŠ ÚnO, Bratří Čapků 1332

Tlačítka a další prvky vestavěných panelů nástrojů a nabídek (CommandBar) a jejich Control ID ve verzi Excel 2010

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

Zdokonalování gramotnosti v oblasti ICT. Kurz MS Excel kurz 3. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

Použijeme-li prostorový typ grafu, můžeme pro každou datovou zvolit jiný tvar. Označíme datovou řadu, zvolíme Formát datové řady - Obrazec

KIV/ZIS cvičení 5. Tomáš Potužák

Obsah. Seznámení s prostředím Excelu. Poděkování 25 O přiloženém CD 26 Co je na CD 26 Použití CD 26 Systémové požadavky 26 Podpora 27

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

Odstranění řádků (na základě hodnoty)

Programujeme v softwaru Statistica - příklady

Hromadná korespondence

František Hudek. květen 2012

zeleně jsou označené funkce, které patří do zlatého fondu Excelu tyto funkce jsou sice zajímavé, ale pravděpodobně je moc často nepoužijete

Střední průmyslová škola strojnická Olomouc, tř.17. listopadu 49

František Hudek. duben Informační a komunikační technologie MS Excel Úvod do Excelu II. Základy práce s listy a buňkami.

Příručka uživatele HELPDESK GEOVAP

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

EXCEL IV. část. 7. Vzorce a funkceuložení, tisk a doplňky 8. Používané zkratky. Zpracoval: Ing. Pavel branšovský. pro potřebu VOŠ a SŠSE

Hromadná korespondence

Transkript:

Excel Asistent Magazín 05/2003 Funkce pro vyhledávání v seznamech 2/2 postupy, které vám možná zamlčeli Jiří Číhař, Dataspectrum http:// // ( nedílnou součástí tohoto magazínu je i soubor ExcelAsistentMagazin052003.xls obsahující příklady použité v tomto magazínu. Tento soubor si můžete stáhnout z adresy http:///excelmag/download/eam0503x.zip) ExcelAsistentMagazín je určen k volnému šíření. Pokud Vás jeho obsah zaujal, zašlete jej prosím svým kolegům a přátelům. EXCEL ASISTENT MAGAZÍN 05/2003... 1 1. NESTANDARDNÍ TECHNIKY PRÁCE S VYHLEDÁVACÍMI FUNKCEMI... 2 2. SEZNAMME SE S FUNKCEMI POSUN A NEPŘÍMÝ.ODKAZ... 2 3. FUNKCE POSUN ZDATNÝ POMOCNÍK PŘI PROCHÁZENÍ SEZNAMŮ... 2 4. NEPŘÍMÝ.ODKAZ IDEÁLNÍ NÁSTROJ PRO MANIPULACI S ODKAZY V NAŠICH FUNKCÍCH... 4 5. VYHLEDÁVÁNÍ HODNOT V ZAVŘENÉM SEŠITU... 5 6. VYHLEDÁVACÍ FUNKCE V KOMBINACI S MATICOVÝMI VZORCI... 6 7. DALŠÍ KOUZLA S OZNAČENÍM SLOUPCŮ... 7 8. VYHLEDÁVÁNÍ VLEVO... 7 9. NALEZENÍ NEJBLIŽŠÍ HODNOTY MÍSTO HODNOTY PŘIBLIŽNÉ... 8 10. VYHLEDÁVÁNÍ S ROZLIŠOVÁNÍM VELKÝCH A MALÝCH PÍSMEN... 9 11. VYHLEDÁVÁNÍ S VYUŽITÍM ZÁSTUPNÝCH ZNAKŮ... 10 12. VNOŘENÉ VYHLEDÁVACÍ FUNKCE... 11 13. REVERZNÍ VYHLEDÁVÁNÍ... 13 14. VYHLEDÁVACÍ FUNKCE VYHLEDAT POUŽÍT NEBO ZAPOMENOUT?... 14 15. VYHLEDÁVACÍ FUNKCE VRACÍ CHYBU #N/A CO MÁM DĚLAT?... 16 16. VYHLEDÁVACÍ FUNKCE V PROSTŘEDÍ VBA... 18 17. PRŮVODCE VYHLEDÁVÁNÍM... 19 18. NĚKOLIK PŘÍKLADŮ NA DOMÁCÍ CVIČENÍ... 22 19. CO NÁS ČEKÁ V PŘÍŠTÍM POKRAČOVÁNÍ... 24 1

1. Nestandardní techniky práce s vyhledávacími funkcemi V minulém pokračování magazínu jsme se seznámili s vyhledávacími funkcemi, které nám umožňují efektivně zpracovávat seznamy a databáze uložené v excelských listech. Naučili jsme se používat v běžných úlohách funkce SVYHLEDAT, VVYHLEDAT, POZVYHLEDAT a INDEX. V závěru minulé části jme se rozcházeli s příslibem věnovat toto pokračování ne příliš známým technikám se zaměřením na vyhledávání dat v uzavřeném sešitu vnoření vyhledávacích funkcí použití maticových konstant ve vyhledávacích vzorcích a maticový zápis vyhledávacích vzorců použití zástupných znaků při hledání hodnot nalezení nejbližší hodnoty místo hodnoty přibližné použití vyhledávacích funkcí v kódech jazyka VBA rozšíření možností vyhledávacích funkcí pomocí funkce NEPŘÍMÝ.ODKAZ zrychlení procesu vyhledávání dat využití průvodce vyhledáváním V tomto čísle ExcelAsistentMagazínu se nebudeme vracet k základním pojmům a technikám probíraným v první části, a zaměříme se na představení příkladů, v nichž se naučíme používat vyhledávací funkce nestandardním ( a nadstandardním ) způsobem. Protože ovládnutí vyhledávacích funkcí patří mezi nejdůležitější a nejoceňovanější dovednosti pokročilého uživatele aplikace Excel, budeme se i v dalších pokračováních ExcelAsistentMagazínu k této problematice příležitostně vracet. 2. Seznamme se s funkcemi POSUN a NEPŘÍMÝ.ODKAZ Funkce POSUN a NEPŘÍMÝ.ODKAZ jsou často používány jako doplněk k ostatním vyhledávcím funkcím v případech, kdy potřebujeme vytvářet složitější řešení založené na těchto funkcích. V následujících řádcích si tyto nové funkce představíme a naučíme se je používat na několika příkladech. 3. Funkce POSUN zdatný pomocník při procházení seznamů Definice této funkce říká: Vrátí odkaz na oblast, která obsahuje určený počet řádků a sloupců, od určité buňky nebo oblasti buněk. Vrácený odkaz může být jedna buňka nebo oblast buněk. Počet řádků a sloupců, které se mají vrátit, můžete určit. Syntaxe POSUN(odkaz;řádky;sloupce;výška;šířka) 2

Komentář Odkaz je původní odkaz, vůči kterému provádíte posun. Pokud odkaz neodkazuje na buňku nebo oblast sousedících buněk, vrátí funkce POSUN chybovou hodnotu #HODNOTA!. Řádky je počet řádků, o které se má posunout levá horní buňka nového odkazu (nahoru nebo dolů). Zadáte-li například číslo 5, levá horní buňka odkazu bude pět řádků pod levou horní buňkou původního odkazu. Můžete použít kladnou (dolů od původního odkazu) nebo zápornou hodnotu (nahoru od původního odkazu). Sloupce je počet sloupců vlevo nebo vpravo, o které se má posunout levá horní buňka výsledného odkazu vzhledem k původnímu odkazu. Zadáte-li například číslo 5, bude levá horní buňka odkazu o pět sloupců vpravo od levé horní buňky původního odkazu. Můžete použít kladnou (posun doprava od původního odkazu) i zápornou hodnotu (posun doleva od původního odkazu). Výška je požadovaná výška (počet řádků) výsledného odkazu. Výška je vždy kladné číslo. Šířka je požadovaná šířka (počet sloupců) výsledného odkazu. Šířka je vždy kladné číslo. Přesáhne-li takto posunutý odkaz okraje listu, vrátí funkce POSUN chybovou hodnotu #REF!. Vynecháte-li argument výška nebo šířka, implicitně se dosadí výška nebo šířka původního odkazu. Funkce POSUN ve skutečnosti žádné buňky nepřesunuje ani nemění označenou oblast; pouze vrátí hodnotu typu odkaz. Funkci POSUN lze použít ve spojení s libovolnou funkcí, která očekává argument typu odkaz. Například pomocí vzorce SUMA(POSUN(C2;1;2;3;1)) se vypočítá celková hodnota oblasti o třech řádcích a jednom sloupci, která je umístěna 1 řádek pod a 2 sloupce vpravo vzhledem k buňce C2. Následující obrázek názorně ukazuje chování funkce: 3

4. NEPŘÍMÝ.ODKAZ ideální nástroj pro manipulaci s odkazy v našich funkcích NEPŘÍMÝ.ODKAZ - vrátí odkaz určený textovým řetězcem. Odkazy jsou okamžitě vyhodnocovány a je zobrazován jejich obsah. Funkci NEPŘÍMÝ.ODKAZ použijte, pokud chcete změnit odkaz na buňku v rámci vzorce a nechcete měnit vzorec. Syntaxe NEPŘÍMÝ.ODKAZ(odkaz;a1) Odkaz je odkaz na buňku obsahující další odkaz typu A1 nebo R1C1, název definovaný jako odkaz nebo odkaz na buňku ve tvaru textového řetězce. Pokud hodnota argumentu odkaz neodpovídá platnému odkazu na buňku, vrátí funkce NEPŘÍMÝ.ODKAZ chybovou hodnotu #REF!.Pokud argument odkaz odkazuje na jiný sešit (externí odkaz), musí být daný sešit otevřen. V opačném případě vrátí funkce NEPŘÍMÝ.ODKAZ chybovou hodnotu #REF!. A1 je logická hodnota, která určuje typ odkazu. Je-li hodnota argumentu a1 PRAVDA nebo je-li tento argument vynechán, je odkaz interpretován jako adresa typu A1. Je-li hodnota argumentu a1 NEPRAVDA, je odkaz interpretován jako adresa typu R1C1. Funkce NEPŘÍMÝ.ODKAZ umožňuje adresovat i buňky v různých listech sešitu. Můžeme pak načítat hodnoty v různých listech prostým přepsáním názvu listu v buňce, na kterou se funkce odkazuje. 4

A B 1 2 test1 3 A1 4 1 5 =NEPŘÍMÝ.ODKAZ(B2&"!"&B3) 6 =NEPŘÍMÝ.ODKAZ("test1!A1") 7 8 test2 9 A1 10 50 11 =NEPŘÍMÝ.ODKAZ(B8&"!"&B9) 12 =NEPŘÍMÝ.ODKAZ("test2!A1") Při odkazování na list je důležité mezi označení listu a adresu buňky vložit znak vykřičník, jinak odkaz nebude vyhodnocen správně. V případě, že označení listu obsahuje mezeru, je nutné před a za tento název vložit apostrof ( ANSI kód 39). A B 1 test tři 2 A1 3 200 4 =NEPŘÍMÝ.ODKAZ(ZNAK(39) & B2 & ZNAK(39) & "!"& B3) 5 =NEPŘÍMÝ.ODKAZ( "'test tři'!a1") 5. Vyhledávání hodnot v zavřeném sešitu Velkou výhodou vyhledávacích funkcí je jejich schopnost vracet hodnoty i ze zavřeného sešitu. To znamená, že máme možnost vytvořit vzorec, který se odkazuje na seznam v jiném sešitu a pak tento sešit zavřít. Funkce dokáže vracet hodnoty i nadále a reagovat na změny parametrů. Sešit přitom vůbec nemusí být otevřen a ani si jej funkce neotevírají, vnitřním mechanismem Excelu dokáží pracovat se seznamy tak, jako by sešit zůstal otevřený. Pokud potřebujeme sešit, na který se vyhledávací funkce odkazuje, přemístit, musíme jej nejdříve otevřít v Excelu a pak jej přemístit přímo z prostředí Excelu. Pokud bychom sešit přemisťovali jiným způsobem ( např. pomocí průzkumníka) došlo by k roztržení vazby a funkce by přestala vracet hodnoty z tohoto sešitu 5

Funkce NEPŘÍMÝ.ODKAZ nás však zklame v případě zavřených sešitů ji použít nemůžeme. 6. Vyhledávací funkce v kombinaci s maticovými vzorci Problematice maticových vzorců bylo věnováno celé 3. číslo ExcelAsistentMagazínu. V tomto odstavci tedy budeme předpokládat, že čtenář je obeznámen s problematikou tohoto typu vzorců a na tomto místě pouze připomenu, že jednou z předností maticových vzorců je jejich schopnost nahrazovat více vzorců klasických ( tj. nematicových) a tím urychlovat a zjednodušovat výpočty. Způsob použití si představíme na konkrétním příkladu: Úkolem je vypočítat celkový prodej konkrétního výrobku. Standardní postup spočívá v použití dvou funkcí SVYHLEDAT jedné pro nalezení jednotkové ceny, druhé pro nalezení počtu prodaných kusů a následného vynásobení těchto dvou hodnot. Maticový vzorec nám umožní provést výpočet v rámci jediného vzorce za předpokladu, že SVYHLEDAT vrátí obě hledané hodnoty ( vynásobení zajistí funkce SOUČIN). Místo jediného označení sloupce zadáme dvojici hodnot uzavřenou ve složených závorkách, čímž dáme Excelu najevo, že má pracovat s maticí hodnot. 6

Část vzorce {2;3} zapíšeme ručně složené závorky např. pomocí CTRL+ALT+B a CTRL+ALT+N. Vnější složené závorky doplní Excel poté, co potvrdíme vložení maticového vzorce kombinací kláves CTRL+SHIFT+ENTER. Pomocí částečného přepočtu vzorce ( vybereme část vzorce v řádku vzorců a stiskneme F9) vidíme, že vnitřní část SVYHLEDAT(A15;A1:C5;{2;3};0) vrací matici {100;50}, která je použita jako argument pro funkci SOUČIN. 7. Další kouzla s označením sloupců V předchozím příkladu jsme si ukázali, že nemusíme zadávat označení sloupce vždy ve formě jediného čísla. Označení číslem s sebou nese záludnost, protože se nám může v případě rozsáhlejší tabulky stát, že se při počítání sloupců spleteme. Pomoc je v tom, že namísto pořadového čísla sloupce zadáme jeho označení formou písmen uvnitř funkce SLOUPEC.. 8. Vyhledávání vlevo Jedním z omezení funkcí SVYHLEDAT a VVYHLEDAT je neschopnost vracet hodnoty vlevo od klíčové hodnoty. Následující příklad nelze pomocí funkce SVYHLEDAT vyřešit. Zápis funkce je chybný a proto neobdržíme požadovaný výsledek: 7

Řešení však samozřejmě existuje je založeno na kombinaci funkcí POSUN a POZVYHLEDAT. funkce POZVYHLEDAT vrátí číslo řádku, na kterém se vyskytuje hledaná hodnota 58241 v našem případě to je číslo 3. POSUN vrátí odkaz na buňku, která je umístěna od základní buňky B1 2 řádky dolů a jeden sloupec vlevo. 2 řádky dolů získáme tak, že použijeme hodnotu vrácenou funkcí POZVYHLEDAT sníženou o 1 to proto, že POSUN počítá řádky nikoliv od základní buňky, ale od řádku ležícím pod ní ( hodnotu 1 má jeden řádek pod základní buňkou ) Řešení je možné založit i na použití funkce VYHLEDAT nejdříve se však musíme naučit znát její chování ( viz další text) 9. Nalezení nejbližší hodnoty místo hodnoty přibližné Vyhledávací funkce obecně dokáží mimo přesné hodnoty nalézt i největší nižší hodnotu k hodnotě hledané. Podmínkou je vzestupné seřazení seznamu a specifikování argumentu pro shodu na hodnotu různou od nuly. V některých případech však můžeme potřebovat nalézt místo největší nžší hodnoty hodnotu nejbližší, tedy hodnotu, která se od hodnoty hledané liší co nejméně. Co mám na mysli? A B C D 1 Data 2 11 vyhledávaná hodnota: 14 3 6 nejvyšší nižší: 12 4 15 nejbližší: 15 5 7 6 12 7 8 Vyhledávací funkce SVYHLEDAT by po setřídění dat vrátila při nastavení argumentu shoda na hodnotu 1 honotu 12 je to NEJVĚTŠÍ NIŽŠÍ hodnota k hodnotě 14. Pokud chceme nalézt hodnotu nejbližší, můžeme postupovat více způsoby: 1. dvkrát použít funkci POZVYHLEDAT, která umí nalézt jak největší nižší hodnotu, tak i nejnižší větší hodnotu k hodnotě vyhledávané. Musíme však data setřídit jednou vzestupně a ve druhém případě sestupně. Je pak třeba nalézt obě hodnoty a pak je 8

porovnat proti hodnotě vyhledávané s cílem zvolit z této dvojice tu s nejnižším absolutním rozdílem vzhledem k vyhledávané hodnotě. 2. použití vzorce {=INDEX(A2:A7;POZVYHLEDAT(SMALL(ABS(A2:A7- D2);1);ABS(A2:A7-D2);0))} 3. použití kombinace vyhledávacích funkcí a funkce ABS vracející absolutní hodnotu v kombinaci s maticovým vzorcem ve tvaru {=NEPŘÍMÝ.ODKAZ(ODKAZ(ŘÁDEK(A2:A7)+POZVYHLEDAT(MIN(ABS(D 2-A2:A7));ABS(D2-A2:A7);0)-1;SLOUPEC(A2:A7)))} Vzorec vyhledává minimální rozdíl mezi hodnotami v seznamu a vyhledávanou hodnotou. Pak určí číslo řádku a sloupce, ve kterém se nachází tato minimální hodnota a pomocí NEPŘÍMÝ.ODKAZ ji zapíše. 1. ABS(D2-A2:A7) vrací absolutní rozdíl mezi hledanou hodnotou 14 a hodnotami ve sloupci A: {3 8 1 7 2 6} 2. MIN(ABS(D2-A2:A7)) vrací minimum z matice absolutních rozdílů: 1 3. POZVYHLEDAT(MIN(ABS(D2-A2:A7));ABS(D2-A2:A7);0) vrací pořadové číslo mimima v matici abolutních rozdílů: 3 4. ŘÁDEK(A2:A7) vrací čísla řádků obsahující data ve sloupci A: {2 3 4 5 6 7} 5. ŘÁDEK(A2:A7)+POZVYHLEDAT(MIN(ABS(D2-A2:A7));ABS(D2-A2:A7);0)- 1) vrací matici představující čísla řádků od řádku obsahujícího nalezené minimum v počtu řádků obsahujících data:{4 5 6 7 8 9} 6. SLOUPEC(A2:A7) vrací číslo sloupce obsahujícího data: 1 7. ODKAZ( ) vrací matici adres oblasti buněk počínaje nalezeným minimem : {"$A$4" "$A$5" "$A$6" "$A$7" "$A$8" "$A$9"} 8. NEPŘÍMÝ.ODKAZ vrací matici hodnot s počátkem v nalezeném minimu: {15 7 12 8 0 0}. 9. Vzhledem k tomu, že maticový vzorec je zapsán do jediné buňky, je z přdchozí matice vrácena pouze 1. hodnota : 15 10. Vyhledávání s rozlišováním velkých a malých písmen Vyhledávací funkce SVYHLEDAT, VVYHLEDAT, VYHLEDAT nerozlišují velká a malá písmena. Pro tyto funkce není žádný rozdíl mezi výrazy JIRKA, jirka nebo jirka. Pokud potřebujeme zohlednit velikost písmen, musíme sáhnout k maticovým vzorcům a použít funkci STEJNÉ, která ověřuje zda dvojice řetězců je stejná, a to i s ohledem na velikost písmen. 9

11. Vyhledávání s využitím zástupných znaků Vyhledávací funkce obecně dokáží pracovat se zástupnými znaky ve standardní logice:? zastupuje jakýkoliv JEDEN znak * zastupuje LIBOVOLNÝ počet znaků ( libovolný znamená i žádný!) x zastupuje literál x, kde x může být jakýkoliv znak ( pomocí znaku tilda lze tedy vyhledávat i znaky? nebo * Následující obrázek ukazuje použití zástupných znaků ve funkcích SVYHLEDAT a VVYHLEDAT: Použití zástupných znaků však nemusí vracet očekávané výsledky v případě, že nehledáme přesnou shodu čili, když argument shody nemá hodnotu 0. Očekávali bychom, že funkce vrátí opět hodnotu 44, protože hledaná hodnota H??t v argumentu klíče odpovídá řetězci Haut. Vysvětlení, proč funkce vrátila hodnotu 55 10

spojenou s řetězcem Aut spočívá v uvědomnění si faktu, že 4.argument funkce SVYHLEDAT se v případě nastavení na hodnotu 1 chová tak, že vyhledává NEJVĚTŠÍ NIŽŠÍ HODNOTU VZESTUPNĚ SEŘAZENÉHO SEZNAMU. Pokud si tedy seznam seřadíme, dostaneme následující podobu: ID1 ID2 at 11 Aut 55 H??t Had 22 Haut 44 Hu? 66 Hut 33 Vidíme, že největší nižší hodnota k H??t je řetězec Aut, což odpovídá předchozímu výsledku. Z předchozího příkladu je patrné, že vyhledávání pomocí zástupných znaků funguje pouze v případě, že hledáme přesnou hodnotu ( argument shody vyhledávací funkce je nastaven na hodnotu 0). Pokud hledáme přibližnou hodnotu, pak Excel interpretuje zástupné znaky jako znaky reálné a vrátí největší nižší hodnotu vzestupně setříděného seznamu. Poznámka k použití znaku tilda. Jednomu z klientů, který používal vyhledávací funkce k procházení seznamu importovaného z podnikového systému, nevracela funkce SVYHLEDAT správné hodnoty vzhledem k tomu, že zmíněný systém vkládal před hodnoty uložené v jednom ze sloupců znak tilda. Řešení problému spočívalo ve zdvojení tohoto znaku v řetězci předávaného funkci tedy místo SVYHLEDAT( ABC,A1:K1000;3;0) bylo třeba zapsat funkci v podobě SVYHLEDAT( ABC,A1:K1000;3;0) 12. Vnořené vyhledávací funkce Vyhledávací funkce můžeme vcelku bez problémů vnořovat do sebe, v případě odkazu na oblast buněk však musíme vnitřní funkci zapouzdřit do funkce NEPŘÍMÝ.ODKAZ. Následující příklad ukazuje způsob, jak vnořit dvě vyhledávací funkce do sebe. 11

Vnořená funkce SVYHLEDAT(2001;D1:E4;2;0) vrací adresu oblasti, ve které vnější funkce má vyhledávat hodnotu Jiří. Tato vnořená funkce musí být zapouzdřena do NEPŘÍMÝ.ODKAZ, aby předaná hodnota adresy oblasti byla interpretována jako adresa. 12

13. Reverzní vyhledávání Pod pojmem reverzní vyhledávání rozumím postup, kdy ze zdané hodnoty v oblasti dat hledáme odpovídající hodnotu ve sloupci nebo řádku s popisem kategorií. Představme si úlohu, kdy je naším úkolem nalézt v tabulce prodejů jméno prodejce, jehož prodej dosáhl hodnoty 392: prodej za jednotlivé měsíce leden únor březen Jan 359 743 349 Pavel 742 601 636 Mirek 756 306 772 Jiří 597 390 308 Hana 425 715 410 Jitka 514 638 392 Kateřina 451 335 692 V tomto případě nám použití vyhledávacích funkcí mnoho nepomůže, protož nevíme, ve kterém sloupci se hodnota 392 bude nacházet. Řešením je součinnost funkce NEPŘÍMÝ.ODKAZ a maticového vzorce A B C D E 1 prodej za jednotlivé měsíce 2 leden únor březen 3 Jan 359 743 349 4 Pavel 742 601 636 5 Mirek 756 306 772 6 Jiří 597 390 308 7 Hana 425 715 410 8 Jitka 514 638 392 9 Kateřina 451 335 692 10 11 prodej 392 12 prodejce Jitka {=NEPŘÍMÝ.ODKAZ("A" & SUMA((A1:D9=B11)*ŘÁDEK(A1:D9)))} Vzorec {=NEPŘÍMÝ.ODKAZ("A" & SUMA((A1:D9=B11)*ŘÁDEK(A1:D9)))} pracuje následujícím způsobem: A1:D9=B11 změní oblast dat na tabulku pravdivostních hodnot A B C D E 1 prodej za jednotlivé měsíce 2 leden únor březen 3 Jan NEPRAVDA NEPRAVDA NEPRAVDA 4 Pavel NEPRAVDA NEPRAVDA NEPRAVDA 5 Mirek NEPRAVDA NEPRAVDA NEPRAVDA 6 Jiří NEPRAVDA NEPRAVDA NEPRAVDA 7 Hana NEPRAVDA NEPRAVDA NEPRAVDA 8 Jitka NEPRAVDA NEPRAVDA PRAVDA 9 Kateřina NEPRAVDA NEPRAVDA NEPRAVDA 13

(A1:D9=B11)*ŘÁDEK(A1:D9) vynásobí hodnoty v předchozí tabulce čísly řádků A B C D E 1 prodej za jednotlivé měsíce 2 leden únor březen 3 Jan 0 0 0 4 Pavel 0 0 0 5 Mirek 0 0 0 6 Jiří 0 0 0 7 Hana 0 0 0 8 Jitka 0 0 8 9 Kateřina 0 0 0 SUMA((A1:D9=B11)*ŘÁDEK(A1:D9)) sečte hodnoty v tabulce výsledkem je 8 ("A" & SUMA((A1:D9=B11)*ŘÁDEK(A1:D9))) vytvoří řetězec A8 NEPŘÍMÝ.ODKAZ vrátí odkaz ( přečte hodnotu) na buňku s adresou A8 14. Vyhledávací funkce VYHLEDAT použít nebo zapomenout? Funkce VYHLEDAT patří mezi nejméně používané ve skupině vyhledávacích funkcí. Přesto je vybavena chováním, které ji předurčuje k tomu, aby se stala jedním z našich favoritů: 1. umožňuje rychlé vytváření konverzních tabulek 2. nevyžaduje, aby sloupec s klíčovými hodnotami byl umístěn v tabulce s návratovými hodnotami 3. je mimořádně rychlá Pokud při vyhledávání v rozsáhlých seznamech označíme rychlost odezvy funkcí SVYHLEDAT a VVYHLEDAT jako 1, pak kombinace POZVYHLEDAT + INDEX by mohla obdržet známku 3 ( přibližně 3x rychlejší), ale rychlost odezvy VYHLEDAT lze ocenit na 100. Samozřejmě záleží i na dalších podmínkách, nicméně pokud nám jde o rychlost odezvy, pak VYHLEDAT nemá konkurenci VYHLEDAT však vyžaduje vzestupné seřazení sloupce prohledávaných hodnot ( oblast 1. argumentu funkce). Ostatní vyhledávací funkce umožňují prohledat i neseřazený seznam VYHLEDAT tuto možnost nepřipouští. Rychlé vytváření konverzních tabulek Potřebujeme konvertovat hodnoty z 1. sloupce na hodnoty obsažené v příslušném řádku sloupce druhého: 1 první 2 druhý 3 třetí 4 čtvrtý Řešením je zapsat funkci =VYHLEDAT(A1;{1;2;3;4};{"první";"druhý";"třetí"; čtvrtý }), která z buňky A1 14

načte hodnotu, porovná ji s hodnotami v první matici {1;2;3;4} a vrátí příslušnou hodnotou z matice druhé {"první";"druhý";"třetí"; čtvrtý } Pokud by však hodnoty v prohledávaném seznamu ( čili v oblasti předané prvnímu argumentu) nebyly seřazeny vzestupně, dostaneme zcela podivné výsledky. =VYHLEDAT(A1;{2;4;1;3};{"druhý";"čtvrtý";"první";"třetí"}) vrátí tyto konverzní hodnoty: 1 #N/A 2 druhý 3 druhý 4 čtvrtý Oddělení sloupce s klíčovými hodnotami a sloupce s návratovými hodnotami Funkce VYHLEDAT umožňuje fyzicky oddělit oblasti vyhledávaných a návratových hodnot a dokonce je vůči sobě posunout. viz obrázek: Oblasti vyhledávaných a návratových hodnot nemusí být ani uloženy ve stejném listu nebo dokonce ve stejném sešitu. Využití rychlosti funkce VYHLEDAT při náhradě SVYHLEDAT, VVYHLEDAT v dalším odstavci nalezneme příklad vzorce obsahující funkci VYHLEDAT 15

15. vyhledávací funkce vrací chybu #N/A co mám dělat? Pokud vyhledávací funkce v zadané oblasti nenalezne hledanou hodnotu, pak vrací jako výsledek hodnotu #N/A. V předchozím čísle ExcelAsistentMagazínu jsme si ukázali, jak nahradit tyto chybové hodnoty jiným, smysluplnějším textem. Pokud totiž používáme vyhledávací funkce v dokumentech určených pro další uživatele, pro prezentaci apod., není příliš žádoucí, aby se v buňkách objevovaly chybové hodnoty. Neznalý uživatel pak neví, o jakou chybu se jedná a v důsledku může být snížena důvěryhodnost našeho dokumentu. Proto je vhodné chybové hodnoty odstranit, případně nahradit jinou hodnotou. Řešení je založeno na zapouzdření vyhledávací funkce do funkce KDYŽ, která otestuje návratovou hodnotu: =KDYŽ(JE.NEDEF(SVYHLEDAT();"NENALEZENO";SVYHLEDAT()) Pokud vyhledávací funkce nenalezne požadovanou hodnotu, vrátí hodnotu chyby #N/A. Tato hodnota je předána funkci JE.NEDEF, která pak vrátí hodnotu PRAVDA a výsledkem funkce KDYŽ je řetězec NENALEZENO. Pokud funkce SVYHLEDAT nalezla požadovanou hodnotu, je výsledkem funkce JE.NEDEF hodnota NEPRAVDA a funkce KDYŽ předá výpočet svému třetímu argumentu, který opět obsahuje funkci SVYHLEDAT. Dojde tedy k opětovnému vyhodnocení funkce SVYHLEDAT. Tento postup je často používán bohužel na úkor výpočetní rychlosti. Při auditech excelských dokumentů se s ním pravidelně setkávám, autoři jej považují za spolehlivý a účelný. Je zajímavé, že i v případě velice rozsáhlých seznamů ( tisíce buněk, často obsahujících další funkce), kdy rychlost odezvy je nízká, autoři setrvávají na vžitém postupu a nesnaží se nalézt alternativy. Tato situace je tristní zejména ve společnostech, které investují nemalé částky do výpočetních systému ( především společnosti z oblasti finančnictví) a pak používají dostupné prostředky nejméně efektivním způsobem. Jaké tedy existují alternativy k výše popsané metodě? V podstatě jde o eliminaci duplicitního vyhodnocování vyhledávací funkce nebo její nahrazení funkcí rychlejší. ( pro potřeby příkladu předpokládejme, že hledáme hodnotu abc v oblasti A1:A100 a chceme vrátit příslušnou hodnotu ve sloupci D) =KDYŽ(COUNTIF(A1:A100 ; abc )=0;"";SVYHLEDAT( abc ;A1:D100;4;0)) nebo =KDYŽ(COUNTIF(A1:A100; abc )=0;""; INDEX(D1:D100;POZVYHLEDAT( abc ;A1:A100;0))) nebo ( v případě vzestupně seřazeného seznamu ) 16

=KDYŽ(COUNTIF(A1:A100; abc )=0;""; VYHLEDAT( abc ;A1:A100;D1:D100))) nebo použití následující uživatelské funkce errortrap 'Autor:Harlan Grove (HrlnGrv@aol.com) 'způsob použití '=errortrap(vzorec,#n/a) nebo =errortrap(vzorec,co_mám_zobrazit_při_chybě,#n/a) 'Lze zpracovat i více chybových hodnot - pokud chceme např. nahradit #N/A, #NULL!, '#REF! and #NAME? 'hodnotou -1, pak funkci voláme takto =errortrap(vzorec,-1,#n/a,#null!,#ref!,#name?) Function errortrap(v As Variant, ParamArray e() As Variant) As Variant Dim i As Long, m As Long, n As Long, t As Variant errortrap = v If Not IsError(v) Then Exit Function 'žádná chyba nebyla nalezena n = UBound(e) If Not IsError(e(0)) Then m = 1 t = e(0) Else m = 0 t = "" End If If n < m Then 'žádné další argumenty, vyhovuje všem typům chyby errortrap = t Exit Function End If For i = m To n 'testuj daný typ chyby If v = e(i) Then errortrap = t Exit Function End If Next i End Function Použití této metody ukazuje obrázek: 17

16. Vyhledávací funkce v prostředí VBA Vyhledávací funkce je samozřejmě možné a často i vhodné začlenit do našich programů zapsaných v VBA. V následující tabulce nalezneme převod mezi českými názvy používanými v uživatelském prostředí a anglickými názvy, které využíváme v kódech VBA POSUN OFFSET SVYHLEDAT VLOOKUP VVYHLEDAT HLOOKUP VYHLEDAT LOOKUP POZVYHLEDAT MATCH INDEX INDEX NEPŘÍMÝ.ODKAZ INDIRECT Pro použití těchto funkcí je dobré vědět, že se na ně můžeme odkazovat dvěmi růtnými způsoby s poněkud odlišným výsledným chováním: Application.Match nebo Application.WorksheetFunction.Match Doporučuji používat první způsob důvodem je chování funkce v případě, že nenalezne hledanou hodnotu. Pro tento případ je vhodné použít kód 18

If IsError(Application.Match(Var, SourceRange, 0)) Then... Pokud totiž voláme vyhledávací funkci prostřednictvím objektu Application, vrací tato funkce v případě neúspěšného vyhledávání chybovou hodnotu typu Variant, kterou pak můžme testovat pomocí funkce IsError. Pokud bychom volali funkci prostřednictvím objektu WorksheetFunction, pak by v případě neúspěšného vyhledávání došlo ke vzniku běhové chyby VBA, kterou bychom museli ošetřit standardními technikami ( pomocí On Error GoTo a vytvořením kódu ošetřujícího tuto chybu) Typické použití vyhledávací funkce je patrné v následujícím příkladu funkce GetRowNum vrací číslo řádku, ve kterém se v rámci sloupce A nachází hodnota myval: Function GetRowNum(myVal) GetRowNum = Application.Match(myVal, Range("A:A"), 0) If IsError(GetRowNum) Then GetRowNum = 0 End Function Následující kód umožňuje ověřit, zda hodnota zapsaná do buňky ve sloupci A je obsažena v seznamu. Kód je nutné vložit přímo do listu, ve kterém chceme ověřovat data. Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim val As Long Dim MojeData As Variant MojeData = Array( "Jirka", "Jitka", "Martina", "Barbora") On Error Resume Next If Not Intersect(Target, Range("A:A")) Is Nothing Then val = Application.WorksheetFunction.Match(Target.Value, MojeData, 0) If val > 0 Then MsgBox "Hodnota " & Target.Value & " je obsažena v seznamu" Else MsgBox "Hodnota " & Target.Value & " NENÍ obsažena v seznamu", vbcritical + vbokonly End If End If End Sub 17. Průvodce vyhledáváním Microsoft připravil uživatelům pomůcku nazvanou Průvodce vyhledáváním, která usnadňuje vytváření vzorců založených na vyhledávacích funkcích. Od této pomůcky nemůžeme očekávat řešení sofistikovaných problémů, ale v jednodušších případech nebo pro potřeby seznámení se s vyhledávacími funkcemi může být užitečná. 19

Podmínky pro úspěšné použití pomůcky jsou dvě: 1. musíme ji mít nainstalovanou 2. databáze, ve které chceme vyhledávat hodnoty, musí mít důsledně pojmenovány sloupce i řádky Instalace Pomůcka je uložena ve formě doplňku Excelu s názvem Lookup.xla a pokud byla řádně nainstalována, je dostupná pomocí Nástroje > Průvodce > Vyhledávání V případě, že touto cestou doplněk dostupný není, je třeba zjistit, zda byl nainstalován a zaregistrován. Pokud jej nalezneme v přehledu doplňků ( Nástroje > Doplňky), je třeba kliknutím do zaškrtávacího pole doplněk zaregistrovat. Pokud v seznamu není, pokusíme se jej vyhledat pomocí okna dostupného tlačítkem Procházet Nebudeme li ani poté úspěšní, nezbývá než doplněk nainstalovat ze zdrojového CD Microsoft Office. Příklad využití doplňku Průvodce vyhledáváním Doplněk použijeme k vytvoření vyhledávacího vzorce nad tabulkou plateb: A B C D E 1 datum platby firma A firma B firma C firma D 2 1.8.2003 9945 7000 4350 9200 3 3.8.2003 10000 5050 4400 9012 4 5.8.2003 10350 5325 4300 9150 5 7.8.2003 10212 5500 4312 9350 6 9.8.2003 10150 5325 4375 9575 7 11.8.2003 10075 5020 4412 9512 8 13.8.2003 10125 4875 4450 9325 9 15.8.2003 10175 4800 4412 9400 10 17.8.2003 10025 5000 4375 9450 20

Průvodce je rozdělen do 4. kroků: 1. určení oblasti dat 2. určení sloupce a řádku pro výběr 3. určení struktury návratových hodnot 4. určení buňky k zápisu vzorce Určení oblasti dat Určení sloupce a řádku pro výběr Určení struktury návratových hodnot 21

( v tomto bodě se můžeme rozhodnout, zda si přejeme zapsat pouze vzorec, nebo zapsat i kriteria použitá k výběru. Pokud zvolíme i zápis parametrů, máme možnost přepsáním hodnot v těchto buňkách dynamicky měnit výsledné hodnoty) Určení buňky k zápisu vzorce Výsledkem práce průvodce je vytvoření vzorce ve tvaru: =INDEX($A$1:$E$10; POZVYHLEDAT(DATUMHODN("11.8.2003");$A$1:$A$10;); POZVYHLEDAT("firma C";$A$1:$E$1;)) 18. Několik příkladů na domácí cvičení 1. Výpočet výše daně V předchozím díle magazínu jsme řešili úlohu týkající se získání správné hodnoty sazby daně při zadané výši ročního příjmu: 22

Pokusme se tuto úlohu zkomplikovat. Úkolem není nalézt jen hodnotu sazby daně, ale přímo určit výši daňové povinnosti. Ze zadané výše příjmu a tabulky sazeb daně tedy máme určit částku, kterou musíme zaslat finančnímu úřadu. Tabulka: Příjem větší než......a nižší než sazba Výše daně 0 2 500 0% 0 2 501 5 000 1% 25 5 001 20 000 3% 475 20 001 35 000 7% 1 525 35 001 50 000 13% 3 475 50 001 70 000 19% 7 275 70 001 100 000 24% 14 475 100 001 250 000 27% 54 975 >250 001 28% 2. ceník Následující úloha je opravdovým testem našich schopností. Šířka (m) 310 420 515 635 710 820 960 1150 Výška (m) 300 260 277 296 312 350 368 385 410 400 272 291 310 327 371 389 408 432 500 280 299 322 342 385 405 428 455 600 293 313 333 360 405 427 452 478 700 303 327 354 379 427 453 478 501 800 315 341 367 395 444 471 499 524 900 326 355 385 412 466 494 524 546 1000 338 369 401 430 477 516 545 570 1100 349 381 414 447 493 538 566 592 1200 362 395 430 466 510 557 587 616 1300 372 409 447 482 525 577 607 639 1400 383 422 459 498 543 594 628 661 1500 392 433 476 515 558 612 648 684 23

Tabulka představuje ceník okenních žaluzií, Naším cílem je nalézt vzorec, který po zadání šířky a výšky vrátí příslušnou cenu. Zadání je komplikované podmínkou, že klient si může objednat jakýkoliv rozměr není omezen rozměry uvedenými v tabulce. Platí pravidlo, že pokud není nalzen přesný rozměr, je klientovi účtována cena většího rozměru. Pokud tedy např. klient požaduje žaluzii šířka x výška = 450 x 710, bude účtována cena žaluzie 515 x 800, tj. 367Kč. Řešení obou úloh naleznete od 20.7. ve Škole Excelu na webových stránkách http:///pages/learning/learningmain.htm a v dalším čísle ExcelAsistentMagazínu. Pokud mi zašlete úspěšné řešení na adresu eam@dataspectrum.cz, rád je uveřejním v příštím čísle magazínu. 19. Co nás čeká v příštím pokračování vytváření názvů v listech Excelu dynamicky vytvářené názvy využití dynamicky vytvářených názvů pro tvorbu grafů použití názvů ve vzorcích použití názvů v prostředí VBA ( nedílnou součástí tohoto magazínu je i soubor ExcelAsistentMagazin052003.xls obsahující příklady použité v tomto magazínu. Tento soubor si můžete stáhnout z adresy http:///excelmag/download/eam0503x.zip) Archív všech dosud publikovaných čísel ExcelAsistentMagazínu Škola Excelu neustále se rozšiřující soubor řešených příkladů ExcelAsistent - více než 100 funkcí pro efektivní práci v Excelu Máte dotaz týkající se práce v prostředí Microsoft Excel? Staňte se členem elektronické konference věnované výhradně Excelu http:///excelmag/excelmagmain.htm http:///pages/learning/learningmain.htm http:///pages/software/softwaremain.htm mailto:faq@dataspectrum.cz http://www.pandora.cz/conference/excel Další číslo tohoto magazínu určeného pro pokročilé techniky práce v prostředí Microsoft Excel naleznete na adrese od 10.8.2003. Copyright 2003 Jiří Číhař Dataspectrum Jiří Číhař Dataspectrum (http:/) Těším se na setkání s Vámi v příštím měsíci. Pardubice 4.7.2003 Jiří Číhař 24