S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.

V tomto příspěvku je popsáno vytvoření úplně nejjednoduššího makra v Excelu.

Co je to makro?

Než se dostaneme k našemu úkolu, pojďme si vyjasnit, co to vlastně makro je.

Představte si, že v Excelu  děláte opakovaně nějakou rutinní věc. A protože je zbytečné, abyste to dělali znovu a znovu úplně stejně a ztráceli tím čas, potřebujete, aby to dělal Excel automaticky. Aby to ale dělat mohl, musíte ho to nejdříve “naučit”.

Chcete tedy Excelu jakoby říci “teď ukážu, co chci abys dělal, a pak to uděláš sám pokaždé, když kliknu na tlačítko”. 

Technicky je makro aplikace napsaná v programovacím jazyce Visual Basic for Applications (VBA), což je jazyk používaný výhradně v MS Office.

Makra můžeme jak nahrávat, tak přímo zapisovat.

Příklad

Naše ukázkové makro bude dělat triviálně jednoduchou činnost – bude mazat buňky A1 až B2 (tedy čtyři buňky).

Je jasné, že takové makro ve skutečnosti práci příliš neulehčí – teď jde ale o to, abychom si ukázali obecný postup pro vytvoření maker.

Makro bude spojené s tlačítkem. Výsledek tedy bude takový, že uživatel klikne na tlačítko a tím smaže všechno, co je v buňkách A1 až B2 napsáno.

Návod

Abyste mohli pracovat s makry, musíte mít v Excelu aktivní kartu “Vývojář” – ta ale v základním nastavení aktivní není. Pro její zobrazení jděte (v Excelu 2016) na Soubor – Možnosti – Přizpůsobit pás karet a zaškrtněte “Vývojář”. Tak, jak je to na obrázku.  

vložení karty vývojář

V tuto chvíli byste už měli mít k dispozici kartu “Vývojář” takto:

přidaná karta vývojář

Teď tedy nahrajeme makro – jinak řečeno provedeme úkony, které chceme pro příště automatizovat.

Klikneme na tlačítko “Zaznamenat makro”

zaznamenat makro

Pokud chceme, tak makru dáme nějaké jméno (mezery nejsou povoleny). Klikneme na OK

V tuto chvíli se tlačítko “Záznam makra” změnilo na “Zastavit záznam”. 

zastavení záznamu

Provedeme to, co je obsahem makra – v našem případě označíme myší čtyři příslušné buňky a stiskneme “Delete”. Přesně tak, jako bychom buňky promazávali bez makra.

Klikneme na “Zastavit záznam” a makro je vytvořené. Ověříme si to tak, že klikneme na tlačítko “Makra” a seznam všech maker (my máme zatím jen jedno) uvidíme.

přehled maker

Můžeme je dokonce i spustit tlačítkem “Spustit” . Pokud spustíme konkrétně naše makro, promažou se znovu příslušné buňky.

Vyzkoušejte si to. Napište něco do uvedených buněk a spusťte makro. Je-li makro nahrané správně, buňky se promažou.

Naším posledním úkolem je už jen přiřadit makro k tlačítku.

Nejprve tlačítko vložíme tak, jak je to na obrázku:

vložení tlačítka

Tedy kliknutím a pak roztažením po listu. Excel v tuto chvíli sám nabídne přiřazení makra k tlačítku. Stačí vybrat příslušné makro a dát OK.

dokonceni prirazeni tlacitka

A to je vše. Můžete si vyzkoušet, že i tlačítko funguje – pokud napíšete něco do příslušných buněk a pak zmáčknete tlačítko, buňky se promažou.

Pokud v seznamu maker kliknete na Upravit, zobrazí se Vám zápis makra zapsaný v jazyce VBA, nějak takto:

Sub vyukaexcelu()
' mojemakro
    Range("A1:B2").Select
    Selection.ClearContents
End Sub

Důležitý jsou třetí a čtvrtý řádek. Pokud umíte anglicky, není těžké je dešifrovat. V řádku tři označujeme oblast A1 až B2, v řádku čtyři vymažeme obsah z vybrané oblasti.

Video

Nejjednoduššímu zápisu makra se věnuje i tato lekce našeho kurzu:

Elearning středně pokročilý Excel:

S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.

1 Komentář

  1. Pěkný návod a to video na YT je super. Já osobně měl hodně problém s kontingenčními tabulkami. Tak jsme se rozhodl pak pro (odkaz na externí web byl odstraněn). To mi pomohlo celkem se začátky. Teď už si to vychytávám sám a vzdělávám se hlavně s informacemi z internetu.

  2. Dobrý den, zkouším jednoduché makýrko na zautomatizování použití filtru. A nějak se mi nedaří.
    Mám dva sloupce, dny pod sebou od 1.1.2014 do dneška a druhý sloupec jsou přiřazené denní průměrné venkovní teploty. Pomocí tohoto makra bych chtěl docílit toho, že do dvou nezávislých buněk bych zadal ohraničený interval venkovních teplot, např. 8°C až 9°C a vyfiltrovaly by se mi příslušné dny.
    Začnu tedy zadávat makro, nad sloupci mám již zadaný filtr:

    Kliknu na políčko s filtrem, objeví se nabídka, vybírám Filtry čísel, dále se nabízí Rovná se, Nerovná…. atd. Já volím Mezi a zadávám větší jak 8 a menší jak 9. Ok. Zastavuji zadávání makra. Výsledkem je toto makro, kde bych nějakým způsobem potřeboval do Criteria1 a Criteria2 dostat hodnoty z mých stanovených buněk. Např. K4 a L4. Tzn. já do buněk K4 a L4 zadám třeba 2 a 4 a po spušťění makýrka by se měly vyfiltrovat dny, kdy byly tyto teploty. Problémem je, jak dostat tyto hodnoty (proměnné) do makra za Criteria1,2

    ActiveSheet.Range(“$A$8:$D$897″).AutoFilter Field:=4, Criteria1:=”=> (” ‘List1′”!K4″)” _ , Operator:=xlAnd, Criteria2:=”<=9“

    Děkuji a zdravím Petr Jedlička

  3. Dobrý den Petře, na tohle nepoužívejte automatický filtr, ale Advanced Filter (Rozšířený). Ten dělá přesně to, co hledáte – ať už ho použijete v makru nebo ne.

  4. Dobrý den,
    chtěl bych se zeptat, jakým způsobem je možné docílit toho, aby mi Makro fungovalo pro více listů?
    Př. Udělám tabulku se jmény v list1 a následně udělám totožnou tabulku v list2. V případě, že udělám makro na seřazení jmen v list1, toto makro mi pak bohužel nefunguje pro list2, protože je v něm nadefinovaný pouze list1.
    Děkuji za pomoc

  5. Lukáš – makro může fungovat buď pro konkrétní list (list1, list2) nebo pro list, na kterém právě aktuálně jste (ať je to kterýkoliv). Záleží jen na tom, jestli oblast řazení, kteoru v makru definuje nebo ne, obsahuje i odkaz na list. JB

  6. Dobrý den, mám buňku, do které vepisuji různá čísla. Tato buňka za pomoci odmíněného formátování mění svou barvu. Potřebuji toto formátování rozšířit na několik dalších buněk. Jde to za pomoci maker? Děkuji za radu

  7. Podmíněné formátování lze definovat makrem stejně jako cokoliv jiného. Často stačí to makro nahrát a upravit, ani se nemusí zapisovat…

  8. Zdravím
    Mám napsaný seznam CD a pomocí komentářů jsem si ke spoustě z nich vložil obrázek obalu CD, který měl velikost 7x7cm. Bohužel jsem však nějakou chybou velikosti komentářů rozházel do různých velikosí (84×2.5cm, 9×1.5cm apod.), a ještě se mi podařilo, že ty komentáře jsou rozházeny po celém listě. Lze prosím pomocí nějakého “makra” udělat to aby se všem komentářům dali nastavit stejné velikosti a umístit je tam kde mají být ?

  9. Dobrý den, mám soubor o cca 90ti listech (na každém jsou data a z nich vyvozená kontigenční tabulka), potřebuji pravidelně tyto tabulky tisknout – dá se nějak jednoduše pomocí makra “nasázet” tabulky k tisku (co nejvíce na jeden list papíru? Díky

  10. Dobrý den, prosím o radu. V makrech jsem začátečník :-)Potřebovala bych jeden velký soubor – cca o 10ti tisících řádcích rozdělit dle kritéria v jednom sloupci na několik stovek nových excelů. Je to vůbec proveditelné? Děkuji

  11. Dobrý den,
    mám takový sen,vytvořit si nějaké tabulky,nebo graf v excelu,kde bych chtěl data pravidelně aktualizovat dle zařízení SDS – http://onlinetechnology.cz .
    Je mi jasné,že musím vytvořit nějaká makra a říct excelu,že musí ze zařízení informaci číst,nebo tak něco ..¨
    Myslíte,je to hodně složité?

    Díky,Martin.

  12. Dobrý den,

    mám několik desítek csv souborů s daty. Tyto csv soubory mají identický počet stejně pojmenovaných sloupců, jen různé množství dat v řádcích.

    Má představa je všechny csv soubory nahrát do stejné složky a k nim přihrát xls soubor, do kterého by se mi pomocí makra nahráli pod sebe všechny řádky ze všech csv souborů v dané složce. Lze toto nějak naprogramovat? navedl by mě prosím někdo na správnou cestu? Makra neovládám, dnes začínám 🙂 děkuji moc

  13. Dobrý den,

    prosím o radu. Mám tabulku v Excelu, kterou potřebuji pravidelně aktualizovat (měnit hodnoty, přidávat řádky, měnit texty). Stejnou tabulku potřebuji na více listech v jednom sešitu, pokud změním hodnoty nebo přidám řádek v první tabulce, potřebuji aby se změna promítla do všech dalších listů, tzn. tabulky musí být stále totožné (na dalších listech už jen filtruji potřebné hodnoty). Je toto možné pomocí makra? A jak postupovat?
    Děkuji.

  14. Monika – makrem to jde, ale je to trochu přes ruku. Jedna možnost jsou obyčejné vzorce, např.:
    =List1A1
    nebo pak Power Query v rámci jednoho souboru.

  15. Jo, to je asi fakt. Dá se to obejít vzorečkem jako =INDEX(A:A;ŘÁDEK()), ale stejně bych to dělal přes Power Query asi…

  16. ziskal@seznam.cz
    Dobrý den, šel by výběr oblasti definovat v konkrétních buňkách např. nepřímím odkazem? Místo Range(“A1:B2”).Select by v buňkách načetlo makro v C3 odkaz A1 a v C4 odkaz B2.
    Děkuji, Získal

  17. Jak mám soubor uložit, aby po opětovném otevření se makro zachovalo?

  18. Dobrý den excel. Kouzelníci,
    Jsem obchoďák a evidenci zákazníků mám v excelu. Cca 10 listů. Firmy mám rozdělené podle zaměření (např. automotive, security…apod) Ve všech listech mám stejný systém záznamu. tzn. Sloupec A název firmy, B web apod.
    V jednom ze sloupců mám údaj, kdy jsem jim naposledy volal.
    A teď ten problém co řeším.
    Chci si udělat makro, které by mělo zajistit to, že mi do samostatného listu po spuštění makra vypíše firmy ze všech listů podle toho, kdy jsem jim naposledy volal, nebo jestli jsem jim vůbec volal. Má to sloužit k tomu, abych vždy nemusel projíždět celý excel a kontrolovat řádek po řádku, kdy jsem jim naposledy volal.
    Příklad: Firma XY, voláno 22.5.2017, Firma YZ voláno 22.5.2017.
    Makro by mělo být nastavené tak, že po třech měsících od data, mě vyhodí záznamy, které potřebuji aktualizovat(provolat). Tzn. “vypiš. záznam. datum>90 dní od záznamu.”
    Nebo alespoň, aby to vypsalo firmy, u kterých mám zaznamenány nějaký rest. Např. “zavolat na konci roku” zkrátka, aby to vypsalo firmy u které mám v daném sloupci nějakou poznámku. Je to trochu kostrbaté, věřím, že naprogramovat jde cokoliv. Dost by mi to pomohlo v práci. mail: Peta.stefan@gmail.com. Prosím o konzultaci. Zaplatím. Díky moc

  19. Dobrý den.
    Vytvořila jsem v excelu formulář objednávky a uzamkla okna tak, aby uživatel mohl vyplnit jen potřebné údaje. Potřebovala bych mu buňky pro vyplnění označit barvou, která by se ale netiskla. Bylo by to tedy jen “pohledové” zvýraznění buňky. Nemohu přijít na způsob, jak to udělat. Mohlo by můj problém vyřešit makro a jak?

  20. Potřebuju makro na zpracování CSV výstupu od kolegyně, který mi posílá každý měsíc. Lze nějak uložit makro úplně mimo konkrétní sešit, abych si vždycky otevřel tabulku, co kolegyně pošle a pak jen klávesovou zkratkou to makro vyvolal?

  21. Aby makro fungovalo pro všechny soubory (a bylo tedy vázané na Váš počítač a ne na soubory…), je třeba aby bylo ve vašem osobním sešitu maker (personal.xlsb), což se dá upravit v nastavení makra.

  22. Dobrý den,
    vytvořil jsem si makro (mazání nulových řádků), které mi podle hodnoty buňky určitého sloupce daný řádek smaže. Tzn. např. mám seznam dat, pokud je ve sloupci “E” v daném řádku “nula” makro daný řádek smaže a jde na další kde opět testuje hodnotu ve sloupci “E” a případně opět smaže dokud není projitý celý soubor. Potřeboval bych ale “nulu” měnit za jiné hodnoty respektive místo “nuly” dát odkaz na hodnotu v buňce A1. tzn. pokud bude v buňce A1 hodnota 5 smažou se všechny řádky které mají ve sloupci “E” hodnotu 5 pokud hodnotu v buňce A1 změním na 8 a pustím makro, smažou se mi řádky s hodnotou 8 ve sloupci “E”. Poradíte jak do makra vložit ten odkaz na hodnotu v buňce? Díky

Komentáře není možné přidávat