MS EXCEL základy programování a algoritmizace ve VBA Vedoucí týmu: Kristina Balogová Členové týmu: Miroslava Saňáková Nikola Pálfiová Michal Machů 2016/2017
Obsah ALGORITMUS... 2 Vlastnosti algoritmů... 2 Dělení algoritmů... 2 Rekurzivní a iterativní algoritmy... 2 Deterministické a nedeterministické algoritmy... 2 Sériové, paralelní a distribuované algoritmy... 2 Různá pojetí pojmu algoritmus... 2 Co je makro... 3 Složitější makro... 3 První program... 4 UŽIVATELSKY DEFINOVANÁ FUNKCE... 7 VBA-vytvoření vlastní funkce... 7 ROZDÍL MEZI MAKREM A UŽIVATELSKY DEFINOVANOU FUNKCI (UDF)... 7 Debug... 8 ASCII... 8 ASCII TABULKA:... 8 UNICODE... 9 HISTORIE... 9 PŮVODNÍ CÍLE... 9 Jednotnost... 9 Univerzálnost... 9 Jednoznačnost... 9 VYUŽITÍ... 10 Operační systémy... 10 Aplikace... 10 Web... 10 VBA referenční příručka... 10 PŘÍKLADY PROGRAMOVÁNÍ VE VBA... 11 ZDROJE... 12 1
ALGORITMUS Algoritmus je schematický postup pro řešení určitého druhu problémů, který je prováděn pomocí konečného množství přesně definovaných kroků. Ačkoliv se dnes tento pojem používá především v informatice a přírodních vědách obecně, tak je jeho působnost daleko širší (kuchyňské recepty, návody a postupy ). Samotné slovo algoritmus pochází ze jména perského matematika 9. století, který ve svých dílech položil základy algebry (arabské číslice, řešení lineárních a kvadratických rovnic). Vlastnosti algoritmů 1. Konečnost algoritmus má konečné množství kroků. 2. Určitost všechny kroky algoritmu jsou přesně definovány. 3. Korektnost algoritmus skončí pro libovolná data se správným výsledkem v konečném množství kroků. 4. Obecnost algoritmus řeší všechny úlohy daného typu. Dělení algoritmů Rekurzivní a iterativní algoritmy Iterativní algoritmus je takový, který spočívá v opakování určité své části. Opakuje kód prostřednictvím volání sebe sama. Výhoda rekurzivních algoritmů je v jejich snadno čitelném zápisu. Nevýhodou je spotřeba dodatečných systémových prostředků pro udržení jednotlivých rekurzivních volání. Deterministické a nedeterministické algoritmy Deterministický je takový algoritmus, který má v každém svém kroku právě jednu možnost, jak pokračovat. Nedeterministický jich má více. Sériové, paralelní a distribuované algoritmy Sériový algorimus vykonává všechy kroky v sérii (jeden po druhém), paralelní algoritmus tyto kroky vykonává zároveň (ve více vlákech) a distribuovaný algoritmus kroky vykonává zároveň na více strojích. Různá pojetí pojmu algoritmus V běžné řeči a v různých učebnicích se setkáte s různě přísným pojetím pojmu algoritmus. Někdo požaduje splnění více z uvedených vlastností, někdo méně. Základní myšlenka je nicméně shodná. Algoritmus je lidsky (a tedy nepřesně) řečeno strojově proveditelný, spolehlivý a užitečný pracovní postup. 2
Co je makro Výborně se hodí pro stále se opakující činnosti. Případně chceme-li vytvořit v Excelu něco profesionálního, neobjedeme se bez maker (VBA). Jejich použití je v Excelu velice jednoduché. Stačí mít základy programování ve Visual Basicu (VB), nebo v jiném programovacím jazyku, a již můžete programovat. Složitější makro Spustíme nejprve Visual Basic. V menu Nástroje vybereme makro a poté Editor jazyka Visual Basic Otevře se nám vlastní okno ve Visual Basicu. Doporučuji si ještě zobrazit okna Project Explorer a Properties Window a obdržíme již použitelnou obrazovku: 3
Tak a máme přehledně uspořádanou plochu se všemi potřebnými drobnostmi. No a můžeme se vrhnout do našeho prvního programu. První program Z menu vybereme Insert - Module a můžeme napsat náš První program. Pro jednoduchost si vybereme například součet. Function secti(x, y) secti = x + y End Function 4
Pro kontrolu námi vytvořených programů existuje mnoho prostředků, např.: Object Browser, který nám umožní i vložit popisek námi vytvořené funkce. Ať víme, co jsme si to naprogramovali. Ke každé funkci si můžeme uložit komentář. V Object Browser pravým tlačítkem na funkci vybereme Properties... 5
Zde zadáme náš popis. Po stisknutí OK se naše poznámka uloží. A teď již můžeme v Excelu naší první funkci použít. Vybereme Vlož - Funkce, vybereme vlastní funkce. Zde již je stačí kliknout na název námi vytvořené funkce a hotovo :) 6
A tohle je výsledek. Tak a tímto bychom měli svou první naprogramovanou funkci. Je pravda, že zadáním =10+20 máme součtovou funkci hned a bez programování, ale cílem bylo ukázat jak naprogramovat funkci na jednoduchém příkladu. Složitější příklady budou následovat. UŽIVATELSKY DEFINOVANÁ FUNKCE funkce je příkaz či sled příkazů vykonávaných jako celek a tvořících uzavřenou jednotku, kromě toho, že funkce provádí nějaké příkazy v určitém sledu (pořadí), tak také vrací určitou hodnotu, a tuto hodnotu můžeme uložit do proměnné (resp. do paměti PC) a následně zpracovat. např. funkce y = log (x), tzn. známý zápis funkce logaritmus, ze zadaného čísla x vypočítá jiné číslo a vyjádří (resp. na-vrátí) je jako číslo y. Funkce v programech, tzn i v Excelu, se chovají stejně, tzn tak jak je v předchozím komentáři zmíněno, návratová hodnota funkce může obsahovat buď výsledek výpočtu, nebo může informovat o úspěšném či neúspěšném výsledku průběhu funkce. VBA-vytvoření vlastní funkce Jednotlivé verze Excelu mají integrovány řádově stovky funkcí. Přesto se můžeme dostat do situace, kdy by se nám hodila funkce, která v Excelu není. Nebo nás nebaví opakovaně zapisovat dlouhý vzorec obsahující více funkcí a chceme si vytvořit vlastní funkci, která tuto kombinaci funkcí nahradí. ROZDÍL MEZI MAKREM A UŽIVATELSKY DEFINOVANOU FUNKCI (UDF) Funkce jsou již v Excelu předdefinovány. Pomocí makra můžeme sloučit několik funkcí dohromady a tím si vytvořit v Excelu nad tabulkou, sešitem, vlastní novou funkcionalitu. 7
Debug Anglické slovo debug znamená ladění anebo vychytaní chyb, odstraněni chyb z počítačového programu. Je to proces odlaďovaní chyb z počítačového programu anebo při vývoji softwaru. ASCII ASCII je anglická zkratka pro American Standard Code for Information Interchange (americký standardní kód pro výměnu informací). Jde o kódovací systém znaků anglické abecedy, číslic, jiných znaků a řídících kódů. Jde o historicky nejúspěšnější znakovou sadu, z které vychází většina současných standardou pro kódovaní textu přinejmenším v euro-americké zóně. ASCII TABULKA: 0032 mezera 0033! 0034 " 0035 # 0036 $ 0037 % 0038 & 0039 0040 ( 0041 ) 0042 * 0043 + 0044, 0045-0046. 0047 / 0048 0 0049 1 0050 2 0051 3 0052 4 0053 5 0054 6 0055 7 0056 8 0057 9 0058 : 0059 ; 0060 < 0061 = 0062 > 0063? 0064 @ 0065 A 0066 B 0067 C 0068 D 0069 E 0070 F 0071 G 0072 H 0073 I 0074 J 0075 K 0076 L 0077 M 0078 N 0079 O 0080 P 0081 Q 0082 R 0083 S 0084 T 0085 U 0086 V 0087 W 0088 X 0089 Y 0090 Z 0091 [ 0092 \ 0093 ] 0094 ^ 0095 _ 0096 ` 0097 a 0098 b 0099 c 0100 d 0101 e 0102 f 0103 g 0104 h 0105 i 0106 j 0107 k 0108 l 0109 m 0110 n 0111 o 0112 p 0113 q 0114 r 0115 s 0116 t 0117 u 0118 v 0119 w 0120 x 0121 y 0122 z 0123 { 0124 0125 } 0126 ~ 0127 0128 0129 0130 0131 0132 " 0133 0134 0135 0136 0137 0138 Š 0139 0140 Ś 0141 Ť 0142 Ž 0143? 0144 0145 ' 0146 ' 0147 " 0148 " 0149 o 0150-0151 - 0152 0153 0154 š 0155 0156 ś 0157 ť 0158 ž 0159 ź 0160 t. mezera 0161 ˇ 0162 0163 Ł 0164 0165 Ą 0166 0167 0168 0169 0170 Ş 0171 " 0172 0173 0174 0175 Ż 0176 0177 ± 0178 0179 ł 0180 0181 µ 0182 0183 0184 0185 ą 0186 ş 0187 " 0188 Ľ 0189 0190 ľ 0191 ż 0192 Ŕ 0193 Á 0194 Â 0195 Ă 0196 Ä 0197 Ĺ 0198 Ć 0199 Ç 0200 Č 0201 É 0202 Ę 0203 Ë 0204 Ě 0205 Í 0206 Î 0207 Ď 0208 Đ 0209 Ń 0210 Ň 0211 Ó 0212 Ô 0213 Ő 0214 Ö 0215 0216 Ř 0217 Ů 0218 Ú 0219 Ű 0220 Ü 0221 Ý 0222 Ţ 0223 ß 0224 ŕ 0225 á 0226 â 0227 ă 0228 ä 0229 ĺ 0230 ć 0231 ç 0232 č 0233 é 0234 ę 0235 ë 0236 ě 0237 í 0238 î 0239 ď 0240 đ 0241 ń 0242 ň 0243 ó 0244 ô 0245 ő 0246 ö 0247 0248 ř 0249 ů 0250 ú 0251 ű 0252 ü 0253 ý 0254 ţ 0255 8
UNICODE Unicode (anglicky Unicode) je technická norma pro oblast výpočetní techniky definující konzistentní kódování pro reprezentaci a zpracovávání textů použitelné pro většinu písem používaných v současnosti na Zemi. Nejnovější verze obsahuje repertoár více než 120 000 znaků pokrývajících 129 moderních a historických písem a mnoho sad symbolů. Standard sestává ze sady tabulek pro vizuální referenci, popisu metod kódování, sady referenčních datových souborů a dalších položek, jako například vlastností znaků, pravidel pro normalizaci textů, dekompozici, řazení, vykreslování a zobrazování obousměrného textu (pro správné zobrazení textu obsahující písma psaná zprava doleva i zleva doprava, jako například arabské a hebrejské písmo Úspěch Unicode v unifikaci znakových sad vedl k jeho rozšíření a převládajícímu používání pro internacionalizaci a lokalizaci počítačového softwaru. Unicode je implementován mnoha technologiemi, včetně moderních operačních systémů, XML, programovacím jazykem Java a NET Frameworkem firmy Microsoft. HISTORIE Ke konci osmdesátých let 20. století vznikla naléhavá potřeba sjednotit různé kódové tabulky znaků pro národní abecedy. Například český jazyk používal v informatice nejméně 5 různě kódovaných tabulek (kódování bratří Kamenických, PC Latin 2, Windows-1250, ISO Latin. Vznikaly značné problémy při spolupráci aplikací a při přenosech dat mezi programy a různými platformami. Podobná situace byla ve všech jazycích, které nevystačily se základní 7bitovou tabulkou ASCII znaků. Kolem roku 1991 došlo k dohodě a projekty spojily své úsilí na vytvoření jednotné tabulky. Oba projekty stále existují a publikují své standardy samostatně, ale tabulky znaků jsou kompatibilní a jejich rozšiřování je koordinováno. PŮVODNÍ CÍLE Jednotnost Konstantní šířka znaků dovoluje efektivní hledání, třídění, editace a zobrazení prvků. Univerzálnost Kapacita znakové sady musí být dostatečně velká k zahrnutí všech znaků, které by mohly být využity při výměně textů především ty, které už byly definovány v hlavních mezinárodních, národních a průmyslových znakových sadách. Jednoznačnost Jakákoli 16bitová hodnota, která zastupuje v jakémkoliv kontextu stejný znak. 9
VYUŽITÍ Operační systémy Znakovou sadu Unicode používá většina moderních operačních systémů. Operační systémy Microsoft Windows používají pro vnitřní zápis znaků (např. jména souborů a adresářů v NTFS) od Windows 2000 kódování UTF-16, avšak zároveň se v české mutaci používá kódování CP1250 (historicky) a CP852 (v příkazovém řádku). Aplikace Některé starší aplikace Unicode (dosud) nepodporují. Na druhé straně pro některé systémy je Unicode již jedinou používanou znakovou sadou. Programovací jazyky Java a jazyky podporující Common Language Infrastructure (např. C#) vnitřně používají šestnáctibitovou verzi Unicode a navenek podporují mnoho různých kódování. Web Unicode je znakovou sadou pro HTML dokumenty od verze 4.0 a pro všechny XML dokumenty. Výchozím kódováním je UTF-8, které všechny prohlížeče podporují už delší dobu. VBA referenční příručka http://www.fce.vutbr.cz/aiu/vojkuvka.m/bu006/reference.pdf UNICODE TABULKA 10
UNICODE znaky PŘÍKLADY PROGRAMOVÁNÍ VE VBA JAKOU HODNOTU VRÁTÍ PŘÍKAZ LEFT("PONDĚLÍ", 2)? 1. Funkce se jmenuje Leva_strana. Vstupními parametry této funkce jsou text a počet. 2. Návratovou hodnotou funkce Leva_strana je příkaz Left se vstupními parametry text a počet. Příkaz Left vrací z námi zadaného řetězce ve vstupním parametru text počet znaků z levé strany podle hodnoty ve vstupním parametru počet. 3. Řetězec je v podstatě slovo neboli konečná posloupnost symbolů dané abecedy. 4. Parametry musí být odděleny středníkem. 11
5. Na obrázku v prvním sloupci vidíme pojmenování naší funkce, čili Leva_strana. 6. Naši funkci v excelu zavoláme zadáním rovnítka a napsáním leva, excel by nám měl sám nabídnout naši naprogramovanou funkci Leva_strana. Příklad zadání vidíte ve sloupci D. 7. Naším vstupním parametrem pro text je slovo Pondělí ve sloupci B a vstupní parametr pro počet je 2 ve sloupci C. 8. Po zavolání funkce Leva_strana zadáváme nejprve parametr Pondělí, oddělíme středníkem a můžeme zadat parametr 2. 9. Výstupem této funkce budou 2 znaky z levé strany zadaného řetězce. ZDROJE https://www.youtube.com/watch?v=nuhbvrslles http://www.fce.vutbr.cz/aiu/vojkuvka.m/bu06/projekt-2016/06/06-ucebni_text.pdf http://ww2.justanswer.com/uploads/toounfazed/2009-09- 06_210006_Vista_Windows_Nabla_Symbol.jpg http://ww2.justanswer.com/uploads/toounfazed/2009-09- 06_210006_Vista_Windows_Nabla_Symbol.jpg http://www.biega.com/special-char.html https://cs.wikipedia.org/wiki/unicode#opera.c4.8dn.c3.ad_syst.c3.a9my 12