projekt: 13/018/1310b/110/000252 Moderní IT technologie k úsporám a efektivitě
školicí materiály ke kurzu: Využití výpočetní techniky pro potravinářské výkaznictví
TENTO PROJEKT JE SPOLUFINANCOVÁN EVROPSKOU UNIÍ EVROPSKÉHO ZEMĚDĚLSKÉHO FONDU PRO ROZVOJ VENKOVA
- 1 -
Obsah: 1. část – Úvod – výkaznictví v MS Excel...................................................................................... 3 MS Excel – základní možnosti práce s daty a výkaznictví:...................................................... 3 Základní tvorba provázaných tabulek pro sběr dat................................................................ 5 Příprava propojování zadávaných dat přes ODBC pro jeho centrální ukládání ..................... 9 2 část - Hromadný sběr informací ............................................................................................ 14 Popis souvislostí ................................................................................................................... 14 Zadání případové studie....................................................................................................... 15 Požadavky na tabulku vytvářenou v Excelu ......................................................................... 16 Jakými nástroji EXCELU můžeme jednotlivé funkční požadavky splnit................................ 17 Transformace věcných požadavků do formy EXCELU .......................................................... 18 Postup tvorby formuláře ...................................................................................................... 20 3. část - Controlingové formuláře ............................................................................................ 39 Report sloužící k rozhodování .............................................................................................. 60 Report sloužící jako podklad pro vytvoření plánu hotovostních toků ................................. 62 Report sloužící k přípravě plánu nákupu.............................................................................. 63 Závěr ..................................................................................................................................... 63 Vývoj IT výkaznictví ve STAROPRAMENU – současné nově zaváděné projekty ...................... 64
- 2 -
1. část – Úvod – výkaznictví v MS Excel Základem většiny tabulek pro výkaznictví jsou sestavy dat pořízené prostřednictvím programu MS Excel, respektive z jeho tabulkových sestav, aplikací a šablon. Tento program z balíku MS Office je v současnosti nejvhodnějším programem pro ruční sběr dat a následné analýzy těchto dat do nejrůznějších kontrolingových nástrojů a sestav. Dalšími možnostmi výkaznictví prostřednictvím výpočetní techniky jsou starší databázové programy, další tabulkové kalkulátory (např. OpenOffice) a v současné době často užívaný program pro analýzu dat – MS Access A samozřejmě sestavy velkých podnikových informačních systémů, např. SAP, které ovšem vzhledem k individuálním instalacím a nutným specialistům na jejich aplikování zde nebudeme dál rozvíjet.
MS Excel – základní možnosti práce s daty a výkaznictví: Analyzování dat: Dynamické doplňování. Data si můžete jednoduše přeformátovat nebo přeuspořádat. To vám pomůže odhalit mezi nimi další souvislosti. Excel se učí, takže na základě vašeho chování automaticky doplní zbývající data za vás. Nemusíte se učit a používat žádné vzorce ani makra. Doporučená kontingenční tabulka. Excel dokáže rychle zpracovat i složitou analýzu. Z vašich dat vytvoří souhrn s náhledem různých možností kontingenčních tabulek, abyste si je mohli porovnat a vybrat si tu, která se nejlíp hodí pro vaše účely.
Vizualizace dat: Doporučený graf, který nejlíp zachytí význam vašich dat. Dostupné grafy si můžete bleskurychle zobrazit v náhledu a potom vybrat takový, ve kterém se data zobrazí v nejsmysluplnější podobě. Rychlá analýza. Projděte si různé způsoby vizualizace dat a porovnejte si je. Až si vyberete ten, který je pro zobrazení vašich dat nejlepší, můžete jedním kliknutím použít formátování, minigrafy, grafy i tabulky. Ovládací prvky formátování grafů. Představte si, že můžete svobodně, rychle a efektivně upravovat vzhled svých grafů. Prostřednictvím nového a interaktivnějšího prostředí pro formátování jdou měnit nadpisy, rozložení i další prvky grafů.
Sdílení dat: Jednodušší sdílení. Sdílejte sešity snadno a s jistotou. Protože se prezentace ve výchozím nastavení ukládají online na OneDrive nebo na SharePoint, máte vždycky jistotu, že sledujete nejnovější verzi.* Stačí všem spolupracovníkům poslat odkaz na stejný soubor. Zveřejnění v sociální síti. Potřebujete, aby vaši práci co nejrychleji posoudila spousta různých lidí? Nasdílejte vybrané části svých tabulek na webu tím, že je zveřejníte na svých stránkách v sociálních sítích. Online prezentace. Sdílení obrazovky v konverzaci nebo schůzce Lyncu vám umožní spolupracovat na sešitech s ostatními v reálném čase. Při online prezentacích můžete taky ostatním povolit, aby nad vaším sešitem převzali kontrolu.
- 3 -
Možnosti specielních šablon na internetu: http://office.microsoft.com/cs-CZ/templates/results.aspx?qu=excel&av=zxl
- 4 -
Základní tvorba provázaných tabulek pro sběr dat V následujícím příkladu si na praktické ukázce ukážeme jak pracovat s více listy v sešitu. Jak údaje z těchto listů přenášíme na jiné listy a vytvoříme tak souhrnné listy z dílčích hodnot jiných listů.
Zadání příkladu: Chceme vytvořit kompletní evidenci tržeb vybraných druhů zboží. Evidenci chceme vést přehledně po měsících (co list to jeden měsíc) a současně mít evidenci celkových tržeb za rok v samostatném listu. Evidenci celkových tržeb za rok chceme mít sestavenou po měsících i po jednotlivých zbožích. Předpokládáme, že za celý rok budu mít ve všech měsících stejné druhy zboží (řekněme sledovaný výběr).
Obecné řešení příkladu: Nejprve si vytvoříme tabulky tržeb, který později rozkopírujeme a vytvoříme tak stejně strukturované listy leden – prosinec. Pokud v tabulce použiji nějaké centrální hodnoty (např. sazba DPH) které budou platné pro všechny listy, je vhodné si je umístit na samostatný list. Dále vytvořím tabulky souhrnných tržeb po měsících a souhrnných tržeb po zboží jako dva samostatné listy do kterých propojíme údaje z našich listů leden až prosinec. Tím máme příklad vytvořen a můžeme s ním prakticky pracovat. Jakoukoliv změnu, kterou uděláme na libovolném měsíci (listu) hned uvidíme v souhrnných listech formou změn součtů.
Praktické řešení:
Vytvoříme tabulku tržeb podle vzoru příkladu :
Uvedený příklad si zformátujeme podle uvedeného vzoru. Následně jej doplníme základními výpočty pro výpočet ceny celkem a celkovými součty pomocí funkce SUMA (AutoSUM) v posledním řádku. Pro výpočet ceny celkem s DPH použijeme sazbu DPH z připraveného listu „Data“. Tím máme zajištěn nezávislý údaj na údaji v listech a po následném vytvoření dalších listů (únor – prosinec) budeme moci měnit sazbu pouze na jednom místě (v listu Data).
- 5 -
Všechny výpočty vychází z následujícího cvičení. Současně si je můžeme prohlédnout, případně opsat ve vzorovém souboru.
Vytvoříme duplikáty listu leden (listy leden-prosinec podle vzoru lektora): List „leden“, který máme kompletně vytvořený zkopírujeme 11x a jednotlivé kopie listu přejmenujeme na únor až prosinec. Listy kopírujeme pomocí klávesy CTRL+levého tlačítka myši, kterým uchopíme záložku listu a přesuneme se doprava po liště listů (postup viz. předchozí kapitoly). Výsledné tabulky budou vypadat následovně :
Abychom neměli na všech listech stejné hodnoty, projdeme všechny listy a změníme různé počty kusů. Tím jsme vytvořili kompletní simulaci tržeb vybraného zboží našeho střediska. Můžeme si vyzkoušet, že nám opravdu funguje změna ceny celkem s DPH při změně sazby DPH v buňce B1 na listu Data. List Data můžeme pro lepší přehlednost skrýt pomocí příkazu Formát/List/Skrýt.
Vytvoříme souhrnný list „Celkem“ a propojíme do něj výsledné hodnoty z jednotlivých měsíců - podle vzoru příkladu a lektora: Nejrychlejším způsobem vytvoříme tabulku kopií listu prosinec. Na zkopírovaném listu smažeme všechny údaje (buňky B2:E11), odstraníme sloupec B (ceny za kus sčítat nebudeme) a do tabulky
- 6 -
vložíme dva řádky (pro budoucí měsíce leden – prosinec). Nakonec přepíšeme do buňky A1 místo textu položka „měsíc“ a sloupec A vyplníme měsíci leden – prosinec (kopírováním řad). Tabulka bude vypadat následovně:
Nyní do tabulky propojíme hodnoty z jednotlivých listů. Vycházíme z toho, že chceme aby se nám promítali součtové hodnoty z 12 řádku jednotlivých měsíců do této tabulky. Konkrétně v buňce B2 listu celkem chceme mít stejnou hodnotu jako v buňce C12 listu leden. To zapíšeme do buňky B2 následujícím způsobem: =leden!C12 (pomocí klávesnice nebo myši). Tím jsme vytvořili propojení první hodnoty a můžeme si vyzkoušet že opravdu funguje: změníme libovolný počet kusů na listu leden, změní se mi součet kusů na listu leden a spolu se mi změní i hodnota v buňce B2 listu celkem. Uvedenou buňku B2 lze nakopírovat doprava na buňky C2:D2. Po úpravě formátu buněk máme první měsíc hotov. Propojení dalších měsíců vytvoříme obdobně. Ručně si po jedné vytvoříme obdobnou vazbu v buňkách B3:B13 a následně ji zkopírujeme na sloupce C:D. Výsledná tabulka vypadá následovně:
- 7 -
Vytvoříme souhrnný list „Celkem zboží“ a propojíme do něj součty položek za zboží z jednotlivých měsíců - podle vzoru : Opět vytvoříme tabulku kopií listu prosinec. Na zkopírovaném listu smažeme všechny údaje (buňky B2:E11), a odstraníme sloupec B (ceny za kus sčítat nebudeme). Tabulka bude vypadat následovně:
Nyní do tabulky nastavíme vlastní součty. Chceme vlastně sečíst položky na stejné pozici jednotlivých měsíců pod sebou (všechny kusy sešitu A5, všechny ceny celkem pravítek, atd..) Konkrétně: v buňce B2 budou sečteny všechny buňky C2 všech listů leden až prosinec. Zapíšeme tedy do buňky B2 následující vzorec (doporučuji provést za pomocí myši): =leden!C2+únor!C2+březen!C2+duben!C2+květen!C2+červen!C12+červenec!C12+srpen!C12 +září!C12+říjen!C12+listopad!C12+prosinec!C12 Tím mám proveden výpočet jedné položky. Do ostatních buněk tabulky uvedený vzorec pouze rozkopíruji. Po grafické úpravě formátu tabulku dostanu následující tabulku souhrnných součtů zboží za všechny měsíce podle příkladu :
- 8 -
Součet lze provést také pomocí funkce SUMA: =SUMA(leden:prosinec!C2). Uvedený výraz není vhodné použít pro nebezpečí chybných výsledků v případě přeházení listů. Výraz nezajišťuje součet buňky C2 od ledna do prosince ale pouze součet od listu leden po list prosinec (v případě že nám někdo přesune prosinec za duben, budu sčítat místo celého roku pouze pět měsíců). Náš příklad je u konce. Nyní si jej můžeme vyzkoušet a případně znovu pečlivě projít.
Příprava propojování zadávaných dat přes ODBC pro jeho centrální ukládání V této kapitole si vysvětlíme princip propojení aplikace s externím zdrojem dat pomocí ODBC ovladače. Jedná se obecný popis, který je platný pro jakoukoliv aplikaci. I když se nejedná o téma speciálně platné pouze pro Excel, je nutné se s ním seznámit, protože bude tvořit základní složku vědomostí nutných pro pochopení příkladů v dalších kapitolách. Pro pochopení tohoto příkladu předpokládáme alespoň základní znalosti databázové problematiky. Je nutné znát pojmy jako data, databázový server, SQL, databázová tabulka atd.
Popis řešeného problému Mnoho aplikací pro zpracování dat neukládá všechny spravované informace ve svých vlastních souborech, ale používá služeb některého z externích datových zdrojů. Datových zdrojů může být celá řada, od jednoduchého textového souboru, přes dříve oblíbené souborové databáze třeba ve formátu DBF až po databáze uložené na moderních SQL serverech. Každý takový zdroj zpravidla používá svůj vlastní formát pro uložení dat a metody pro přístup k těmto datům. Aby programátoři aplikací nemuseli čelit problému s různorodostí datových zdrojů a vyvíjet aplikace pro každý zdroj zvlášť, byl vytvořen standardní nástroj, který umožňuje přistupovat k různým zdrojům dat pomocí jednotné standardizované platformy ODBC (zkratka pro Open Database Connectivity).
Vysvětlení pojmu ODBC ODBC ovladač si můžete představit jako prostředníka, který zprostředkovává komunikaci mezi uživatelskou aplikací a externím zdrojem dat. Aplikace svůj dotaz na data předá do ODBC. Příslušný ovladač přeloží tento dotaz tak, aby mu rozuměl externí zdroj dat a zašle mu jej. Odpověď od zdroje dat opět putuje přes ODBC, které přeloží výsledek do standardní podoby a vrátí jej volající aplikaci. Princip práce ODBC je dán standardem, proto jakákoliv aplikace, která umí použít ODBC ovladače může přistupovat k jakémukoliv externímu zdroji dat od libovolného výrobce, který pro to poskytne příslušný ovladač. ODBC tak umožnil standardizovat na straně aplikací přístup k datům a nestarat se o to, jakým konkrétním způsobem pracuje zdroj dat.
- 9 -
Na jedné straně tedy aplikaci stačí, když umí pracovat s ODBC. Na straně druhé výrobci různých zdrojů dat k nim poskytují příslušné ODBC ovladače, aby jejich zdroje byly lehce přístupné aplikacím. To je výhodné pro programátory aplikací, kteří mají k dispozici nezávislý standardizovaný přístup k datům a potažmo i pro uživatele, kteří tím pádem získají aplikace přistupující k různým datům levněji a v kratším čase.
Zadání příkladu •
Naučte se spouštět správu ODBC ovladačů
•
Seznamte se možnostmi správy ODBC na vašem počítači
Jak sami vidíte, tento příklad je poněkud netypický. Nebudeme v něm zatím vůbec pracovat se samotným Excelem, ale podíváme se na nastavení ODBC ovladačů, která nám umožňuje provádět operační systém Microsoft Windows.
Práce s ODBC ve Windows Souhrnný postup Veškeré ovládací prvky pro nastavování ODBC ovladačů jsou integrální součástí operačního systému Microsoft Windows. Pro práci s nimi tedy nemusíte instalovat žádné další utility nebo aplikace. Stačí dodržet následující postup: •
Spustit správu ODBC ovladačů
•
Nalézt nebo instalovat vhodný ovladač k požadovanému typu zdroje dat
•
Založit nové nebo editovat existující propojení ke konkrétnímu zdroji
•
Použít ve své aplikaci nastavené propojení
Spuštění správce ODBC Spuštění správce ODBC je jednoduchá operace. Správce ODBC naleznete po stisknutí tlačítka Start v levém dolním rohu obrazovky v nabídce Programy/Nástroje pro správu/Datové zdroje (ODBC), jak ukazuje následující obrázek:
Pokud chcete experimentovat nebo vážně pracovat s externími zdroji dat, doporučujeme vám umístit ikonu pro spouštění správce přímo na plochu. Dostanete se tak ke správci rychle a pohodlně, kdykoliv budete potřebovat.
- 10 -
Upozorňujeme na skutečnost, že předchozí postup i obrázek platí beze zbytku v operačním systému Microsoft Windows 8, 7 . Na starších systémech může být správce ODBC přístupný odlišným způsobem - je tedy třeba se při spouštění řídit možnostmi daného operačního systému. Typ: hledejte nástroje pro správu PC nebo administrátorské nástroje.
Seznam instalovaných ovladačů ODBC Pokud jste shora uvedeným způsobem spustili správce, zobrazí se vám následující dialog, který umožňuje provádět veškerá potřebná nastavení ODBC:
Dialog má dvě řady záložek. •
Vyberte záložku Ovladače.
•
Podívejte se, jaké ovladače jsou vám k dispozici. Na vašem počítači bude pravděpodobně jiný seznam, než který vidíte na předchozím obrázku, protože nemusíte mít k dispozici stejné zdroje, jaké jsou k dispozici autorovi tohoto článku na jeho PC. Pokud na seznamu nevidíte ovladač pro vámi požadovaný zdroj dat, musíte jej doinstalovat.
•
Tři záložky Trasování, Sdružování připojení a O rozhraní ODBC jako běžní uživatelé zpravidla nebudete používat a proto se jimi v tomto příkladu ani nebudeme zabývat. Trasování slouží správcům systému popřípadě vývojářům pro případné odhalování chyb či nesrovnalostí, sdružování připojení může někdy ušetřit čas při přístupu k datům a záložka o rozhraní je jen informativní. V případě zájmu je nejjednodušší cestou k poznání použít přímo nápovědu, kterou nabízí tlačítko v pravém dolním rohu dialogu.
Instalace ODBC ovladače Pokud vámi požadovaný zdroj dat není uveden na seznamu ovladačů ODBC, musíte jej nainstalovat. Potřebné instalační soubory ovšem musíte nejprve získat od výrobce příslušného zdroje dat a nainstalovat je podle jeho pokynů. Postup nelze předem popsat, protože každý výrobce používá svou vlastní metodiku pro různé verze ovladačů, takže jediným správným postupem je řídit se příslušným instalačním manuálem. Úspěšnou instalaci ovladače poznáte tak, že se nový název objeví na seznamu ovladačů ve správci dat ODBC. - 11 -
Propojení ke konkrétnímu zdroji Přítomnost příslušného ovladače ještě nestačí k samotnému přístupu ke konkrétním datům. K tomu potřebujeme založit a nastavit správné propojení, takzvané DSN. Rozlišujeme tři typy DSN: •
Uživatelské DSN nastaví konkrétní propojení s daty, které je přístupné na daném počítači pouze vám - tedy uživateli, který toto DSN založil. Ostatní uživatelé počítače jej nevidí a nemůžou jej použít. Každý přihlášený uživatel vidí jen své vlastní uživatelské DSN.
•
Systémové DSN jsou k dispozici všem uživatelům daného počítače bez ohledu na to, kdo konkrétní DSN založil.
•
Souborové DSN - jedná se o méně obvyklou formu, kterou se nyní nebudeme zabývat.
Práci s DSN ukazuje následující obrázek:
•
Vyberte záložku Uživatelské DSN nebo Systémové DSN. Další práce s oběma typy DSN je identická, tato DSN se liší jen přístupem uživatelů, jak bylo popsáno výše.
•
Stiskněte tlačítko Přidat. Objeví se vám následující dialog:
- 12 -
•
Na uvedeném seznamu vyhledejte ovladač ODBC pro požadovaný typ externího zdroje dat.
•
Stiskněte tlačítko Dokončit. Po jeho stisknutí se vám objeví dialog nebo průvodce (wizard), který vás provede zbytkem nastavení daného DSN. Vzhled a rozsah průvodce závisí na tom, jaký typ zdroje dat jste zvolili. Jiná nastavení musíte učinit například pro přístup k dBase, jiná k různým SQL serverům apod.
Na tomto místě musíme upozornit, že připojení ke konkrétnímu datovému zdroji se zpravidla nepovede v situaci, kdy tento zdroj není v danou chvíli k dispozici. Ujistěte se proto, že při práci s DSN pro daný zdroj dat je tento zdroj přístupný (například běžící SQL server).
•
Všimněte si: Důležitým prvkem každého DSN je jeho název. Tento název musí být jedinečný v rámci všech DSN nastavených na daném počítači. Jednou použitý název například v uživatelských DSN tedy již nemůžete použít v systémových ani souborových DSN.
•
Všimněte si: Můžete mít pod různými jmény založeno více DSN ke stejnému typu zdroje dat. Vzhledem k tomu, že v DSN lze nastavit nejen datový zdroj, ale v případě například SQL serverů i konkrétní databázi, uživatele a heslo, můžete mít pod různými názvy DSN zajištěn přístup do různých databází nebo můžete třeba zajistit přístupy s různým stupněm oprávnění.
•
Případnou změnu parametrů již existujícího DSN proveďte tak, že umístíte kurzor na příslušný název vybraného DSN a stisknete tlačítko Konfigurovat.
•
Odebrání existující DSN proveďte jednoduše tak, že umístíte kurzor na příslušný název vybraného DSN a stisknete tlačítko Odebrat.
Závěr Tato kapitola si kladla za cíl uvést vás stručně do problematiky přístupu k externím datovým zdrojům pomocí ODBC ovladače. Látka zde probraná je základním stavebním kamenem, bez kterého se neobejdete v příštích kapitolách. K lepšímu pochopení problematiky doporučujeme experimentovat s nastavením ODBS, DSN a popřípadě využít příslušné nápovědy.
- 13 -
2 část - Hromadný sběr informací V této kapitole si ukážeme, jak může kontroler (pracovník zabývající se ve firmě kontrolingem) využít EXCELU při sběru informací z firmy tak, aby byl schopen sestavit potřebné plány, rozpočty nebo výhledy do budoucnosti. V první případové studii se budeme zabývat sběrem informací o nákupu drobného vybavení kanceláří.
Popis souvislostí Manažerský pohled V mnoha firmách se dlouze a detailně zkoumají velké investiční záměry, ale nákup drobného vybavení nebo kancelářské techniky zůstávají na okraji zájmu. Pokud se však podíváme co bylo v minulém roce nakoupeno za zařízení, mnoho finančních ředitelů je překvapeno kolik se koupilo varných konvic, digitálních fotoaparátů, kopírek atp. Tento stav je často spojen se snahou dočerpat zbývající peníze v rozpočtu na konci roku. Sběrem požadavků a kontrolou nákupů v této oblasti můžeme účinně bojovat proti výše popsanému jevu "vánočního šílenství". Od sebraných informací můžeme dále očekávat zjištění reálné potřeby jednotlivých útvarů firmy. Jistě, můžeme se setkat i s přehnanými požadavky, ale zkušený a odpovědný manažer by měl tyto požadavky umět vyřadit. V této oblasti můžou výrazně pomoci tzv. standardy vybavení ale rozebírání této části není předmětem knihy. Dalším důvodem pro sběr požadavků na plánované nákupy je nejen možnost připravit komplexní plán nákupu, ale i možnost vyjednávat o cenách zařízení. Díky sběru požadavků můžeme při vyjednávání o cenách dosáhnout zajímavých množstevních slev při pořízení (daleko lépe se bude vyjednávat o nákupu dvaceti nových židlí v jasně daných termínech, než vyjednávat samostatně o každé z nich), tak i o následném servisu a údržbě. Dosažený standard nakoupeného zařízení může být vyšší kvality než při individuálním nákupu za stejnou cenu. Ten kdo nakupuje, může v průběhu roku sledovat příslušnou komoditu a využít například období slev nebo speciálních akcí, což v důsledku ušetří nemalé prostředky při těchto nákupech. Z manažerského pohledu můžeme výhody těchto informací shrnout do následujících bodů : •
zamezení hromadným nákupům na konci roku ve snaze vyčerpat rozpočet
•
přehled o potřebách útvarů na vybavení kancelářskou a výpočetní technikou
•
možnost držet v rámci firmy jednotné standardy vybavení, což snižuje náklady na údržbu a opravy
- 14 -
•
přípravou plánu nákupu vznikají informace, které lze využít při jednání s dodavateli, nebo sledovat komodity a nákup provést v nejvýhodnější okamžik
Pohled kontrolera Zájmy a pohledy kontrolera jsou ve většině případů stejné jako zájmy manažera, neboť úkol kontrolera je podporovat manažera při rozhodování a dodávat mu potřebné informace. Pro kontrolera plynou ze sběru informací následujících výhody : •
znalost o plánovaných jednotkových cenách nakupovaných komodit
•
informace o celkovém objemu schválených nákupů
•
informace o věcné podstatě plánu (co se skrývá pod jednotlivými čísly)
•
informace o dopadech do cash-flow firmy a do výsledovky v podobě odpisů nebo přímých nákladů
Shrnutí Dle výše uvedených argumentů potenciální přínosy sběru informací nejsou malé, avšak pracnost sběru a zpracování těchto informací nesmí být větší než jejich hodnota. Pokud tedy máme definovat požadavky na řešení, tak by mělo splňovat následující kritéria: •
formulář pro sběr informací musí být snadno vyplnitelný i laikem
•
u dat musí být zajištěna jejich jednotnost, aby nebylo nutné jednotlivé formuláře zpětně kontrolovat a opravovat ještě před fází jejich sumarizace
•
snadné hromadné zpracování
Nyní, když jsme si objasnili souvislosti této případové studie, můžeme přistoupit k definici zadání studie a podívat se i a její řešení.
Zadání případové studie Připravte systém, který umožní připravit plán nákupu drobného vybavení do kanceláří a provozních prostor. Systém musí být připraven v následujících oblastech: •
popis procesu a rolí jednotlivých pracovních pozic v procesu
•
příprava časového harmonogramu pro vypracování tohoto plánu
•
odhad časové náročnosti pro jednotlivé pracovní pozice v procesu
•
odhad nákladů spojených s realizací tohoto procesu
•
odhad potencionálních úspor a ostatních přínosů vyplývajících ze sběru informací
•
pomocí multikriteriálního hodnocení vyhodnotit, zda tento systém zavést nebo nikoliv
- 15 -
Přestože zadaná analýza vypadá na první pohled hrozivě a rozsáhle, při použití zdravého nadhledu je možné ji připravit poměrně přesně a v krátkém časovém horizontu. Příprava analýzy samozřejmě závisí na velikosti organizace a dostupnosti historických dat z účetnictví. Jak jste si jistě všimli, do tohoto okamžiku nebyla vůbec řeč o EXCELU a konkrétním zpracování. Výše uvedeným výčtem jsme chtěli ukázat, co by mělo být uděláno ještě před tím, než vůbec přistoupíme k realizaci tohoto úkolu. Je velmi důležité držet se klasického českého přísloví "třikrát měř a jednou řež", tj. analýzou užitečnosti sběru , která bude předcházet vlastnímu sběru informací, můžeme zabránit nepříjemným překvapením a mrháním času zaměstnanců. Pro další pokračování tedy předpokládejme, že analýza dopadla dobře a máme zelenou pro přípravu celého systému sběru informací. Protože se pohybujeme v oblasti využití EXCELU při plnění kontrolingových úkolů nebudeme se zabývat souvisejícími procesy, ale pouze se zpracováním formulářů v EXCELU.
Požadavky na tabulku vytvářenou v Excelu Podívejme se na kritéria, která musí tabulka - formulář splňovat a způsob naplnění těchto kritérií. Kritéria je možné rozdělit do dvou základních kategorií a to: a)
funkční
b)
věcná
Čím lépe bude formulář připraven, tím méně práce a problémů bude při jeho zpracování. Nutno zdůraznit, že poctivá příprava se stokrát vrátí. Ad a) Tabulka musí být pro pracovníka, který tabulku naplňuje svými požadavky na nákup (dále jen „uživatel“), snadno vyplnitelná, aby nemusel pátrat které položky a kde má vyplňovat. Formulář musí uživatele vést a dávat mu nejlépe na výběr z přednastavených variant nebo v případě, že zadává data z klávesnice, kontrolovat zda jejich formát a obsah odpovídají očekávanému. Nedílnou součástí musí být nápověda k jednotlivým položkám, která obsahuje vysvětlení dané položky a kontaktní osobu, na kterou je možné se obrátit v případě nejasností. Seznam kontaktních osob uvedený ve formuláři zajistí komfort uživateli při vyplňování. To zajistí větší ochotu uživatelů zjišťovat způsob správného vyplnění, a ne si do formuláře vymýšlet, což snižuje vypovídající schopnost formuláře. Naopak zpracovatelům a uživatelům výstupů umožní pro další rok zapracovat připomínky uživatelů a vylepšit tak kvalitu sebraných dat. Funkční požadavky jsou v souhrnu tedy následující : •
vést uživatele při vyplňování formuláře
•
nabízet možnosti formou výběru
•
kontrolovat vstupy (datum, atp...)
•
poskytnout nápovědu k jednotlivým položkám
•
formulář musí obsahovat kontaktní osoby pro řešení problémů - 16 -
Ad b) Požadavky věcné - požadavky na informace, které chceme ze sebraných údajů získat. Požadavky věcné jsou pro tento případ následující: •
seznam požadovaných zařízení včetně počtu kusů podle organizačních jednotek
•
jednotkové plánované ceny jednotlivých zařízení a celkové plánované výdaje podle organizačních jednotek a jednotlivých druhů zařízení
•
odpisy z jednotlivých zařízení, případně rozčlenění na spotřebu drobného hmotného majetku a na investiční část.
•
termín kdy je zařízení požadováno - datum uvedení do užívání (většinou vyhovuje údaj o čtvrtletí nebo měsíc)
Jakými nástroji EXCELU můžeme jednotlivé funkční požadavky splnit Podívejme se, jak můžou jednotlivé nástroje EXCELU pomoci při plnění funkčních požadavků. Prvním z funkčních požadavků je „vést uživatele při vyplňování formuláře“. Tento požadavek znamená, že v okamžiku, kdy uživatel otevře váš formulář, tak mu musí Excel jasně napovídat, které údaje a kam má vyplnit. Ke splnění tohoto úkolu výborně poslouží jednoduchá makra, pomocí kterých vytvoříme dialogová okna pro hladké provedení uživatele celým procesem vyplňování tabulky. Zde si popíšeme jak vytvořit konkrétní dialogy, ale nebudeme se zabývat všemi souvislostmi maker. Čtenáře, který by chtěl zvládnout i obecné základy tvorby maker v Excelu odkazujeme na kapitolu ……………… v této knize. Tím, že se naučíte tvořit jednoduchá dialogová okna a provedete uživatelem vyplněním tabulky, ušetříte si ,ve fázi stahování dat do jednoho souboru, spoustu práce kontrolováním. Pravděpodobně se vám nestane, aby některý horlivý uživatel přidával do tabulky sloupce, nebo prováděl jiné úpravy, které by mohly vaši snahu sebrat data úplně znehodnotit. Dalším funkčním požadavkem je „nabízet možnosti formou výběru“. V našem případě při vyplňování dialogových oken, sestavených pomocí maker, využijeme číselníků. Pomocí těchto číselníků je zároveň prováděna kontrola vstupního údaje - zda zadaná hodnota odpovídá očekávané. Neméně důležitým funkčním požadavkem je poskytnutí nápovědy k jednotlivým položkám formuláře. K tomuto úkolu lze přistoupit opět dvěma způsoby: první a podstatně jednoduší je pomocí vložení komentářů do jednotlivých buněk. Uživatel uvidí ve formuláři v některých buňkách v rohu červený trojúhelníček, který naznačuje, že buňka obsahuje komentář, ve kterém může být nápověda k dané buňce. V praxi taková buňka vypadá asi jako ta na obrázku č.1
- 17 -
Obrázek 1 Tento způsob nápovědy je, podle našeho názoru, pro uživatele tím nejpřehlednějším. Snadno se vytváří a je téměř nepřehlédnutelný. V tomto případě však my nebudeme používat tento způsob tvorby nápovědy, ale nápovědu kterou nám umožňují makra a dialogová okna. Tento způsob vytváření nápovědy je sice složitější, ale výsledek vypadá daleko profesionálněji. Posledním funkčním požadavkem je uvedení seznamu kontaktních osob. Tento požadavek splníme tím, že umožníme zpracovateli formuláře si kdykoliv ze základního menu vyvolat příslušný seznam odpovědných osob pro řešení případných problémů s vyplňováním. Tento seznam je rovněž součástí dialogového okna, vytvářeného pomocí maker. Tím jsme vyčerpali seznam funkčních požadavků na závěr si tedy shrňme jejich seznam :. •
Tvorba dialogů pomocí maker
•
Kontrola vstupu do buněk pomocí seznamů
•
Kontrola vstupu dat formátu datum
•
Nápověda pomocí komentářů k buňce
•
Nápověda k dialogovým oknům v makrech
•
Vyvolání dialogového okna s pevným a neměnným obsahem
Transformace věcných požadavků do formy EXCELU Jak již bylo dříve popsáno, věcnými požadavky se rozumí výstupy, které chceme z tabulek dosáhnout. Shrňme si tedy výstupy, kvůli kterým tento sběr informací provádíme. •
Příprava plánu nákupu
•
Vyčlenění výdajů na drobná zařízení z důvodu řízení Cash-Flow
•
Příprava plánu odpisů
•
Jednoznačná identifikace, které zařízení si kdo objednal a proč jej potřebuje
Výše uvedené výstupy mají spoustu společných bodů. Pojďme si tedy probrat bod po bodu a sestavit seznam údajů, které budeme muset zanést do připravované tabulky. Jako první bod máme uvedenou přípravu plánu nákupu. K sestavení tohoto plánu potřebuje nákupní oddělení vědět jaká zařízení, kdy a v jaké plánovací ceně má nakoupit. Tyto body jsou tedy prvními údaji, které bude tabulka obsahovat.
- 18 -
Pokud se potřebujeme na plánované nákupy dívat z pohledu Cash-Flow firmy, tak potřebujeme znát dva údaje. Tím prvním je jakou částku plánujeme vydat a kdy tento výdaj nastane. To znamená, že pro řízení Cash-Flow i pro plán nákupu potřebujeme společné údaje. - tzn. při sběru požadavků stačí sestavit tabulku jednou a teprve při zpracování formulářů si připravíme sestavy s různými pohledy na data. Pro plán odpisů budeme u každého zařízení, nebo jiné odpisované položky, potřebovat dobu odepisování a v tabulce pak provedeme vlastní výpočet výše odpisů. Protože podle našich současných zákonů je možné jednorázově odepsat zařízení do 40 tis. Kč s dobou použitelnosti ne delší než jeden rok může být většina položek odepsána během jednoho roku. Hranice je však individuální a firma si může hranici pro evidenci snížit vnitřním předpisem. Může se tedy stát, že v jedné firmě je stejné zařízení odepsáno jednorázově, zatímco v jiné je odepisováno např. po dobu 4 let v první odpisové skupině. Pro výpočet plánovaných odpisů tedy potřebujeme částku, za kterou bude každé konkrétní zařízení pořízeno a dobu odepisování. Odpisy se většinou evidují na střediscích, pro která bylo zařízení nakoupeno, a proto je dobré mít i informaci o číslu vnitropodnikového nákladového střediska, které bude zařízení mít zařazeno v majetku, nebo bude pro něj pořízeno. Kvůli možnosti řídit náklady, potřebujeme rovněž vědět, kdo si dané zařízení objednal a jak jeho nákup zdůvodní. Navíc je možné opatřit každou položku prioritou, která ukazuje nakolik je nakupované zařízení pro útvar důležité. Prioritizace je dobrý nástroj k řízení. Nesmí však dojít k tomu, že se pravidelně požadavky s nejnižší prioritou škrtají, protože výsledným efektem je, že žadatelé pak automaticky posouvají svoje požadavky do vyšších priorit, aby je mohli realizovat. Daleko účinnější metodou je například schválení dvou nejvyšších priorit s tím, že dvě nižší priority budou realizovány za přesně definovaných podmínek. Tyto podmínky by mohou být např.: pokud dojde k úspoře v nákupu zařízení z priority 1 a 2, nebo pokud nákup schválí ne přímo nadřízený pracovník žadatele, ale žadatelův nadřízený o úroveň výše. Tento mechanizmus pak při realizaci může odfiltrovat nákup věcí, které jsou pouze přáním zaměstnanců, ale k výkonu vlastní činnosti jej opravdu nepotřebují. Shrňme si tedy údaje, které musíme v tabulce mít proto, abychom byly schopni dostat veškeré informace které potřebujeme. •
Útvar požadujícího nějaké zařízení (jeho název, popřípadě i číslo v organizační struktuře)
•
Číslo nákladového střediska organizačního útvaru firmy pro evidenci odpisů
•
Název zařízení, které chce útvar (žadatel) pořídit
•
Požadovaný termín dodání
•
Počet kusů od daného zařízení
•
Jednotková cena
•
Celková cena pro jedno zařízení a jedno středisko
•
Doba odepisování
•
Priorita, s jakou žadatel chce zařízení pořídit
•
Zdůvodnění požadavku
•
Výpočet výše odpisů
- 19 -
Postup tvorby formuláře V předchozích dvou kapitolách jsme si shrnuli, co všechno budeme k tvorbě tabulky potřebovat a nyní můžeme tedy již přistoupit k tvorbě tabulky jako takové. Vlastní tvorbu rozdělíme do tří relativně nezávislých částí. První z nich bude tvorba Číselníků, druhá bude spočívat v tvorbě vlastního Formuláře a poslední část se bude zabývat makry spojenými s vyplňováním formuláře. Začněme tedy s tvorbou číselníků. Tip: Než se pustíte do čtení této části tak by bylo vhodné si vyzkoušet činnost přiloženého souboru na CD aby jste si lépe dovedli představit popisované funkce a části tabulky.
Tvorba číselníků Číselníky slouží k tomu, aby obsahovaly pevné a neměnné údaje, které budou použity při zadávání dat. Proto je nutné věnovat zvýšenou pozornost jejich sestavování. Uvědomte si, že každá chyba v číselníku se vám vrátí přesně podle počtu uživatelů. Někdy je lepší - pokud je v číselníku údajů více, než bude pravděpodobně použito, ale pokud jich je méně, můžeme očekávat hodně dotazů a budeme řešit spoustu problémů s uživateli číselníků. Jako prvním a nejdůležitějším číselníkem je číselník zařízení, které je možné zakoupit. K jeho tvorbě můžeme přistoupit dvěma rozdílnými způsoby. První z nich, podle mého názoru ten snazší, lze použít v případě, pokud ve společnosti existují pravidla pro standardy vybavení jednotlivých pracovních míst. V těchto standardech najdeme tedy všechna potenciální zařízení, která mohou být nakoupena. Tím, že máme seznam práce nekončí, ale je nutné získat k jednotlivým položkám podrobnější informace. Zde vstupuje do celého procesu nákupní oddělení, které by mělo u jednotlivých zařízení provést bližší specifikaci. Tato specifikace však musí být srozumitelná pro laika. Nemůže se jednat o číslo modelové řady některého výrobku, ale mělo by spíše jít o srozumitelný krátký popis nakupovaného zařízení, kterému bude odpovídat i cena. Například: pokud nakupujeme kopírky, tak by určitě nemělo stačit jako popis kopírka, ale popis by měl obsahovat i informaci kolik kopií za měsíc by měl daný typ být schopen zvládnout. Právě tento parametr výrazně ovlivňuje cenu. Proto se může stát, že položek typu kopírka bude v číselníku více. Máme tedy seznam jednotlivých zařízení, jejich předpokládanou pořizovací cenu a chybí nám doba odepisování. Tento údaj můžeme požadovat po útvaru, který se stará o majetek, tj. řídí pořizování majetku z účetního pohledu. Tím jsme doplnili poslední chybějící část největšího a nejkomplikovanějšího číselníku. Strukturu číselníku si můžete prohlédnout na následujícím obrázku.
- 20 -
Tip : Na obrázku si můžete všimnout, že pokud máme označenou část seznamu, kde se nacházejí data o jednotlivých zařízeních, objeví se mi vlevo nahoře místo odkazu na buňky, které mám označeny název Seznam_zařízení. Pomocí pojmenování oblasti si můžete ušetřit spoustu práce s dalšími úpravami tabulky například v makrech. Pokud se budeme odkazovat na oblast s názvem - jsme nezávislí na tom, kde tato oblast je a jak je veliká.
Druhým způsobem, jak číselník připravit, je vyjít z nákupů v loňském roce. Tento způsob lze použít pouze v případě, že máme tyto informace dostupné v účetním systému. Pokud těmito informacemi nedisponujeme, tak nám nezbývá než si sednout a tento seznam se pokusit vytvořit. Je to způsob, který v sobě bude určitě zahrnovat největší množství chyb. Dalším číselníkem, který budeme používat, je organizační struktura včetně čísel útvarů a příslušných nákladových středisek. Tento číselník je standardní součástí všech vnitropodnikových systémů a neměl by být problém jej z něj získat. Pokud nevíte vy, - 21 -
doporučuji se obrátit na správce vašeho SW a společně se pokusit tento číselník získat. O exportu dat z jiných systémů jsme již psali v kapitole ……………… Číselník pro organizační strukturu by mohl například vypadat podle následujícího obrázku.
Předposledním číselníkem, který budeme používat. je číselník priorit. V tomto číselníku by měla být uvedena i definice použité priority tak, aby bylo na první pohled zřejmé jak je daná priorita definována. Ukázku číselníku máme opět na obrázku. V praxi se osvědčilo používat maximálně 4 priority. Více priorit již vedlo k problémům s jejich používáním a definicí tak aby nebylo možné více výkladů. Naopak méně priorit zase zmenšovalo manévrovací prostor při schvalování rozpočtu.
Posledním číselníkem, který budeme používat je seznam měsíců v roce. Tento seznam slouží k určení doby pořízení určitého zařízení. Tato forma použití seznamu je jednodušší než jeho definování prostřednictvím maker. Obě cesty jsou však možné. U číselníků může vzniknout problém, pokud je budeme připravovat v opravdu velké organizaci s rozmanitými činnostmi. Seznam zařízení a organizační struktura může způsobit, že soubor naroste do takových rozměrů, že jej nebude možné na běžných PC používat, nebo - 22 -
bude velice pomalá jejich distribuce pomocí e-mailu. Pokud tedy soubor překročí 500Kb (což považuji za maximální hranici), je nutné se pokusit o jeho rozdělení do několika částí, např. podle organizace v případě, že určité organizační jednotky používají jen specifické zařízení. Pokud toto rozdělení nelze provést, pak je možné rozdělení provést například podle typu zařízení. Rozdělení podle typu by mohlo být například následující : •
IT zařízení - osobní počítače - klávesnice - myši - CD mechaniky
•
Kancelářské vybavení - kopírky - faxy - stolní telefony - mobilní telefony
•
Ostatní vybavení - lednice - myčky na nádobí - varné konvice
Výše uvedené rozdělení může efektivně zmenšit velikost souborů, ale pro uživatele přináší komplikaci v tom, že musí vyplňovat místo jedné tabulky tři. Tím můžeme považovat tvorbu číselníků za ukončenou a můžeme přejít přímo k tvorbě vlastního formuláře, do kterého se bude sběr dat provádět.
Tvorba formuláře Ve věcné specifikaci jsme si nadefinovali položky, které potřebujeme pro sběr dat. Tyto položky jsou zároveň definicí sloupců obsažených ve formuláři. K již definovaným položkám je možné přidat ještě úplně první sloupec obsahující identifikační číslo požadavku. Žadatel uvidí kolik typů zařízení požaduje a zpracovatel dat může pomocí kombinace čísla útvaru v organizaci a identifikačního čísla vytvořit jednoznačné číslo požadavku. U formuláře budeme zcela určitě potřebovat informaci o tom, kdo formulář vyplňoval a kontakt na něj (žadatel). Tato osoba bude řešit spolu s námi případné nejasnosti ve formuláři a bude kontaktní osobou pro informaci o výsledku schvalování jednotlivých požadavků. Většinou se jedná o ekonomy příslušných útvarů nebo sekretariáty. U přípravy formulářů se vyplatí označit oblasti které se mají vyplňovat a které ne. V našem případě jsem použil modrou barvu pro označení polí do kterých se žádné údaje nevyplňují. Tato pole jsou buď již vyplněna nadpisy, nebo obsahují vzorce, které jsou použity při doplnění nebo výpočtu hodnot. Aby efekt byl dokonalý, je možné list uzamknout a povolit zápis pouze do položek, které nejsou barevné. - 23 -
Podívejme se však ještě na vzorce, které formulář obsahuje a popišme si jejich funkci. Prvním použitým vzorcem je funkce SVYHLEDAT. Která slouží k vyhledání určité hodnoty v číselníku a doplnění odpovídající hodnoty z příslušného sloupce. Tuto funkci používám pro automatické určení : •
Čísla žádajícího útvaru
•
Nákladového střediska útvaru
•
Jednotkové ceny zařízení
•
Doby odepisování
Podívejme se na jeden vzorec podrobněji. Ostatní jsou pouze jeho drobnou obměnou. =KDYŽ(C6="";"";SVYHLEDAT(C6;Organizační_struktura;3)) Tento vzorec je uložen v buňce B6 na listu Formulář. Jádrem vzorce je funkce SVYHLEDAT (vyhledat svisle v seznamu). První parametr – C6 označuje odkaz na buňku která obsahuje vyhledávanou hodnotu. V našem případě se jedná o název organizačního útvaru. Druhým parametrem je Organizační_struktura. Tento parametr je názvem oblasti která je na listu Číselníky ohraničena buňkami E4 : G24 (viz. pojmenované oblasti v předcházející kapitole). Posledním parametrem je číslice 3. Ta říká kolikátý sloupec se má použít pro vytažení hodnoty. Pokud se podíváme na seznam tak uvidíme, že útvaru „Odbor nákupu“ odpovídá číslo 3200. Pokud bychom vzorec nechali pouze ve tvaru jak je výše popsáno, tak v případě, že název útvaru nebude nalezen - vrátí chybovou hodnotu #N/A, tedy nedostupná. K zabránění této situaci použijeme podmínky KDYŽ. To znamená - pokud je buňka , která má obsahovat název organizačního útvaru, prázdná tak místo zobrazení chybového hlášení #N/A se v buňce nezobrazí žádná hodnota. Díky tomuto ošetření můžeme vyplnit vzorcem i buňky, které nebudou obsahovat další záznamy, a zároveň se neobjeví chybové hlášení. V tabulce je předpřipraveno 25 řádků pro data, podle zkušeností tento počet dostačuje. Kdo by si chtěl jistotu více zvětšit, může přidat počet řádků, nebo se vydat složitější cestou, a to připravit makro, které bude vzorce, hodnoty a formátování doplňovat přesně podle počtu vložených zařízení. Podívejme se na další komplikovanější vzorec v tabulce. Tímto vzorcem je výpočet odpisů. Výpočet je založen na předpokladu rovnoměrného odepisování. Odpis pro příslušný rok se tedy počítá buď jednorázový, nebo podle počtu měsíců v kterých bude zařízení užíváno. Samozřejmě pravidla odepisování může mít firma nastavena i jinak. Účetní odpis může být stejný jako daňový odpis, můžeme mít zrychlené odepisování, nebo rovnoměrné. Pro všechny tyto metody jdou postavit vzorce. My si tedy ukážeme vzorec pro výše uvedený případ, kdy odpis máme buď jednorázový v celé částce, nebo v případě, že je na více let tak přesně podle počtu měsíců kdy se zařízení v daném roce používá. =KDYŽ(G6=0;"";KDYŽ(J6=0;0;+KDYŽ(J6=1;I6;I6/J6/12*(12-POZVYHLEDAT(F6;Měsíce;0))))) Nejprve se podívejme na funkci POZVYHLEDAT. Tato funkce nám vrátí pořadové číslo měsíce uloženého v buňce F6 v roce, resp. v tabulce označené jako Měsíce (oblast na listu Číselníky K4 : K15). Pokud tedy v buňce F6 je například Duben pak funkce POZVYHLEDAT nám vrátí
- 24 -
číslo 4, tedy jako čtvrtý měsíc v roce. Parametr 0 znamená, že má počítat od začátku seznamu. Funkce +KDYŽ(J6=1;I6;I6/J6/12*(12-POZVYHLEDAT(F6;Měsíce;0))) je jádrem výpočtu. Zbylé dvě KDYŽ pouze ošetřují chybové stavy. Podívejme se tedy na výpočet: když J6 (doba odepisování) je rovna jednomu roku - tak doplň do buňky M6 celkovou částku za nakoupená zařízení (hodnota v buňce I6), pokud doba odepisování není jeden rok - tak do buňky M6 doplň alikvotní část z roční částky do konce roku. I6/J6/12 nám vypočítá výši měsíčního odpisu a násobení (12-POZVYHLEDAT(F6;Měsíce;0)) nám určí počet zbývajících měsíců do konce roku. Pokud v řádku nejsou vyplněna data, tak se stane, že nám EXCEL nahlásí chybovou hodnotu v okamžiku, když buňka J6 (doba odepisování) má nulovou hodnotu. Tohoto chybového hlášení se zbavíme pomocí podmínky, která ohlídá zda je buňka J6 nulová a pokud ano, tak zabrání pokračování výpočtu a dosadí do M6 hodnotu 0. Vzorec s touto podmínkou pak má tvar KDYŽ(J6=0;0;+KDYŽ(J6=1;I6;I6/J6/12*(12-POZVYHLEDAT(F6;Měsíce;0)))) Ve vzorci je umístěna ještě jedna kontrola, a to pokud je počet požadovaných kusů nulový, tak neprováděj žádné výpočty, ale ponech buňku prázdnou. =KDYŽ(G6=0;"";KDYŽ(J6………. Toto byly oba nejkomplikovanější vzorce, které se v tabulce vyskytují. Máme tady ještě jeden vzorec s podmínkou: KDYŽ a nad tím můžete zkusit hloubat sami. V buňce I6 je následující vzorec =KDYŽ(G6=0;"";+G6*H6) Jeho interpretace pro vás určitě nebude žádným problémem.
- 25 -
Takto tedy vypadá vytvořená tabulka.
Tvorba dialogových oken a maker Konečně se dostáváme k nejzajímavější části přípravy formuláře a tou je tvorba dialogových oken a maker. Projdeme si postupně všechna dialogová a okna a k nim příslušející makra. Nebudeme se zabývat přímo jejich tvorbou, ale budeme se zabývat jejich stavbou a vlastnostmi. Hned první věc, která vás možná zarazí, je to, že se první dialogové okno spustí okamžitě po otevření sešitu. Tohoto stavu jsem docílil velice jednoduchým makrem přiřazeným k objektu „ThisWorkbook“. K tomuto objektu, stejně jako ke všem ostatním, se dostanete stiskem tlačítka „Ruční editace tabulky“ nebo pomocí „horké“ klávesy ALT + E. Tímto krokem opustíte právě spuštěné makro a můžete pomocí kombinace ALT + F11 spustit „Microsoft Visual Basic editor“. V tomto editoru budeme i nadále pracovat a ukazovat si jednotlivá makra a dialogová okna.
- 26 -
Na předcházejícím obrázku můžete vidět modře vyznačený objekt „ThisWorkbook“. Zkuste na něj ukázat myší a stisknout její pravé tlačítko. Z nabídnutého menu vyberte položku „View Code“. Pokud jste vše provedli správně tak se vám v pravé části objevilo nové okno s tímto makrem :
Private Sub Workbook_Open() Sheets("Formulář").Select Range("A1").Select Rozcestnik.Show End Sub Právě toto makro způsobí, že se „Rozcestník“ objeví obrazovce hned po otevření sešitu. Podívejme se na něj trochu podrobněji.
•
Klauzule Private Sub zajistí, že makro je platné pouze v tomto sešitu a nelze k němu přistupovat z jiných sešitů
•
Workbook_Open() – definuje událost ke které píšeme kód, v tomto případě, je to událost otevření sešitu
Následuje kód, který se provede po každém otevření sešitu:
•
Sheets("Formulář").Select – tato formulace zaktivuje list který se jmenuje „Formulář“, což je list na kterém si ukládáme data
•
Další řádek (Range("A1").Select ) nastaví aktivní buňkou buňku A1 právě vybraného formuláře, tato část makra není nezbytně nutná jen vám může usnadnit další práci v tabulce, protože přesně víte která buňka a který list jsou po otevření sešitu aktivní.
•
Posledním řádkem pak zobrazíme již připravené dialogové okno se jménem „Rozcestník“ - Rozcestnik.Show jeho definici můžete vidět na obrázku s definicí projektu v části nazvané „Forms“
•
Pak již následuje ukončení celé akce a na obrazovce nám zůstane aktivní dialogové okno s rozcestníkem.
Toto makro je velice jednoduché, ale může se vám při vaší vlastní tvorbě hodit. Prvním dialogovým oknem, které se tedy objeví na obrazovce hned po otevření tabulky je „Rozcestník“. Jeho obrázek vidíte hned u tohoto textu. Přesně podle definice jednotlivých funkčních požadavků je makro uspořádáno tak, aby uživatele provedlo celým vyplněním formuláře. Uživateli stačí jít pouze tlačítko po tlačítku a z nadpisů již rozumí, co od něj může očekávat. Zkuste si i pohyb po „Rozcestníku“ pomocí klávesy TAB, uvidíte, že se pohybujete pěkně z jednoho tlačítka na tlačítko, které je umístěno
- 27 -
pod ním, nebo v případě posledního tlačítka na první tlačítko. Zároveň si můžete všimnout, že každé tlačítko má definovanou „horkou klávesu“. Jedná se o kombinaci ALT + příslušné písmeno. Jak všechny tyto vlastnosti nastavit si ukážeme za chvíli. Teď snad jen shrnutí toho, co vidíme na obrázku a co by měl správný dialogový box splňovat za podmínky, aby byl pro uživatele dostatečně přítulný.
•
Rozměr dialogového okna musí být úměrný informacím na něm umístěným. Není dobré příliš veliké okno pouze s několika ovládacími prvky a stejně tak na uživatele dobře nepůsobí „přeplácané okno“. V tomto případě můžeme použít například záložek které si ukážeme u nápovědy
•
Rozmístění jednotlivých prvků dialogového okna musí být rovnoměrné, prvky by měly být stejně daleko od sebe, stejných rozměrů. Výrazně to usnadní orientaci uživateli v dialogovém okně.
•
Pomocí klávesy TAB by pohyb po dialogovém okně měl být přehledný, nemělo by docházet k přeskakování některých prvků dialogového okna a k navracení se k nim po vyplnění prvků které po něm následují. Pokud si toto vyžaduje logika dialogu tak se zamyslete nad změnou uspořádání.
•
Každý aktivní prvek okna by měl mít i svoji „horkou klávesu“ tento prvek je hlavně pro tzv. „skalní zastánce klávesnice“. Je pravdou, že v období windows je jich stále méně a méně, ale stále se vyskytují. Osobně si také stále myslím, že ovládání z klávesnice je tím nejrychlejším možným způsobem.
- 28 -
Takže na prvním dialogovém okně jsme si ukázali zásady jejich tvorby a jejich zobrazování. Pokročme však ve výkladu dále a podívejme se na jednotlivé vlastnosti jednotlivých prvků tohoto dialogu. Ve všech případech se jedná o tlačítko „CommandButton“. Popíšeme si tedy vlastnosti jednoho. U ostatních je vše obdobné. Podrobně si tedy rozebereme hned první tlačítko u ostatních si ukážeme pouze kód který je pod tlačítky skrytý. Pokud si v módu zobrazení editoru VBA (Visual Basic) poklepete v okně „Project“ na ikonu formuláře „Rozcestník“ tak se vám na pravé straně zobrazí dialogové vytvořené dialogové okno. V tomto okně si klepněte na tlačítko „Vyplnit údaje o zpracovateli“. V levé dolní části obrazovky se objeví v okně „Properties“ možnosti nastavení tohoto tlačítka (vidíme je na následujícím obrázku).
Z celého množství nastavení použijeme jenom některé a o těch si právě teď povíme. Prvním z použitých nastavení je položka (Name). Tato položka nám slouží k pojmenování tlačítka - 29 -
(resp. jakéhokoliv objektu. Používání pojmenování pomůže v orientaci v kódu makra a zpřehlední práci s ním. Doporučuji pojmenování používat jinak se za chvíli ztratíte v názvech jako je například CommandButton12. Já jsem toto tlačítko pojmenoval „Zpracovatel_údaje“. Druhá použitá položka je „Caption“. Do tohoto políčka můžete vyplnit text, který se objeví pokud ukážete kurzorem myši na tlačítko a chvíli počkáte. Je to stejný příklad jako když ukážete v menu EXCELU na ikonu a u kurzoru myši se vám objeví název ikony. Já jsem do této položky doplnil větu vysvětlující funkci tlačítka. Další měněnou položkou oproti nastavení při vytvoření tlačítka je položka „Accelerator“. Do této položky se vyplňuje písmeno, které má aktivovat toto tlačítko při stisku kombinace ALT + písmeno. V tomto případě se jedná o tlačítko „v“. Poslední měněnou položkou je „TabIndex“. Tato položka určuje, na kolikáté stisknutí klávesy TAB se tlačítko aktivuje. Pokud je „TabIndex“ nastaven na 0 je toto tlačítko aktivní po zobrazení dialogového okna. U ostatních prvků v tomto dialogovém okně je nastavení podobné. Proto se nadále budu zabývat pouze připojenými makry k jednotlivým tlačítkům. První tlačítko nám má tedy vyvolat dialogové okno požadující údaje o zpracovateli formuláře. Toto mako je velice jednoduché. Podívejte se sami.
Private Sub Zpracovatel_udaje_Click() Zpracovatel.Show End Sub Naprosto shodné makro je i pro vyvolání nápovědy.
Private Sub Napoveda_Click() Napoved.Show End Sub V případě volby zadávání zařízení je makro doplněno ještě přesunem informace o posledním zásahu do tabulky. Jedná se o volání makra z jiného makra. Jak vidíte, volání provádíme pouze uvedením jeho jména.
Private Sub Zadavat_zarizeni_Click() Datum_zpracování Zarizeni.Show End Sub
- 30 -
Podívejme se co dělá makro „Datum_zpracování“. Sub Datum_zpracování() ' ' Datum_zpracování Makro ' Makro zaznamenané 16.7.2003 ' Range("Dnešní_datum").Select Selection.Copy Range("Datum_formuláře").Select Selection.PasteSpecial Operation:=xlNone, SkipBlanks _
Paste:=xlPasteValues,
:=False, Transpose:=False Application.CutCopyMode = False End Sub Komentář, který vidíme pod hlavičkou makra je typický pro makra zaznamenaná pomocí záznamníku maker. Tento nástroj vám může velice účinně pomoci při tvorbě maker a při učení se jazyka VBA. Všimněte si řádek, které jsou na začátku uvedeny apostrofem. V editoru jsou tyto řádky v zelené barvě a tato barva nám říká, že se jedná o komentář. Komentář může být také uveden slovem „Rem“ – z anglického remark (poznámka). Používání komentářů je velice důležité v případě složitějších projektů, kdy nám poznámky umožňují od sebe odlišit ucelené bloky kódu VBA a navíc k nim přidat informaci co tato část provádí, jaká jsou vstupní a výstupní data. Používání poznámek doporučuji zejména u maker, která budete opakovaně používat a vylepšovat. Mnohdy si člověk nepamatuje „jak to myslel„ po měsíci, natož po roce. Právě v tomto případě je pravděpodobné, že za rok, až se znovu rozběhne plánování, se k tabulkám vrátíte a budete je chtít vylepšit a upravit. V tomto okamžiku jsou poznámky u maker k nezaplacení. Zpět však k vlastnímu kódu makra. Pokud si přečteme kód, můžeme jej interpretovat následovně. Vyber buňku pojmenovanou „Dnešní_datum“ (to je buňka M3 na listu Formulář). Vybranou buňku umísti do clipboardu (schránka) ke zkopírování. Vyber buňku pojmenovanou „Datum_formuláře“ (buňka M1 na listu Formulář). Vlož do vybrané buňky jen hodnotu (Paste:=xlPasteValues). Zruš označení buňky „Dnešní_datum“. Konec makra. Jak je vidět čtení maker není zase až tak obtížné. Podívejme se co se stane když stiskneme tlačítko „Konec práce“.
- 31 -
Private Sub Konec_prace_Click() ActiveWorkbook.Save ActiveWorkbook.Close End Sub Toto makro uloží aktivní sešit, stejně jako by jste kliknuli na ikonu s disketou a sešit zavře. EXCEL zůstane spuštěný pro další použití. U posledního tlačítka („Odešli tabulku“) je ještě navíc vyvolání dialogového okna pro odeslání tabulky mailem. Tento komfort rozhodně uživatel ocení.
Private Sub Odeslat_tabulku_Click() Application.Dialogs(xlDialogSendMail).Show ActiveWorkbook.Save ActiveWorkbook.Close End Sub
Teď se posuneme o kousek dále a podíváme se na dialogová okna, která jsou vyvolána tlačítky „Vyplnit údaje o zpracovateli“, „Zadávat zařízení“ a „Nápověda a kontaktní osoby“. Začněme tím posledním dialogovým oknem. Jedná se o okno, od kterého pouze chceme aby se otevřelo, uživatel dostal potřebné informace a po návratu se opět aktivoval „Rozcestník“. Vzhledem k tomu, že nápověda má dvě části, použil jsem k jejich oddělení dvě stránky se záložkami. Na jedné stránce by byly informace nepřehledné a pro majitele monitorů s nízkým rozlišením (800x600) by se dialogové okno nemuselo ani vejít na obrazovku. Právě pro tento případ jsou „multiple-pages“ (stránky se záložkami) určeny. Mezi jednotlivými stránkami se můžeme pohybovat třemi způsoby :
- 32 -
•
Pomocí kombinace kláves CTRL + PgDown (PgUp)
•
Pomocí „horkých“ kláves ALT + „n“ („k“)
•
Pomocí myši
Na dialogovém okně je pouze jediné tlačítko. Podle přiřazeného makra (viz. níže) vidíme, že pouze skryje tento dialog a tím se stane „Rozcestník“ zase aktivním dialogem a my můžeme pokračovat v práci.
Private Sub CommandButton1_Click() Napoved.Hide End Sub Doposud jsme se bavili pouze o dialogových oknech, která po nás nechtěla žádné údaje. Teď však přistoupíme k analýze nejdůležitějších dialogů v celém souboru. Jedná se o dialogy, které vloží do formuláře data. Bez nich by tvorba maker a dialogů neměla smysl. První dialog, ze dvou výše uvedených, na který se podíváme, je zadání údajů o žadateli.
- 33 -
Jak je z obrázku vidět, pro vstup dat jsem použil dva typy vstupních polí. Tím prvním a jednodušším je TextBox (dále jen textové pole). Textové pole je použito pro vstup jména a telefonního čísla. Obě dvě vstupní pole jsem nechal prakticky beze změn oproti tomu jak je vytvořil EXCEL. Neobsahují žádnou kontrolu vstupu a ani omezení. Do těchto polí lze zadat prakticky jakýkoliv text. Zajímavější pole je „Organizační útvar“. Toto pole obsahuje předdefinované údaje ze seznamu hodnot, který jsme si připravili v kapitole číselníky. Po rozbalení pole pomocí šipky vpravo se vám nabídne seznam organizačních jednotek firmy a vy si můžete vybrat. Je to užitečná pomůcka, která dovolí automaticky do tabulky pomocí funkce VVYHLEDAT doplnit další potřebné údaje o organizaci. Další výhodou používání pojmenovaných oblastí je, že v makrech se můžeme odkazovat na pojmenované oblasti a ne na buňky. Díky tomuto triku můžete klidně svoji reálnou organizační strukturu doplnit do listu číselníky, klidně můžete přidat nebo ubrat libovolný počet řádků. V případě, že novou oblast pojmenujete stejně, jako je nyní pojmenovaná ta se cvičnou organizační strukturou, nemusíte nic v makrech měnit. Takže poučením by mělo být, pokud to je jen možné, při programování používat odkazy na jména oblastí buněk a ne jen na buňky jako takové. Jestli si ještě pamatujete, v části o číselnících jsme si oblast se jmény organizačních útvarů pojmenovali“Organizační_struktura“. S tímto názvem budeme pracovat i nyní. Jak tedy naplnit seznam hodnotami? Postup je velice jednoduchý. Odkaz na hodnoty přidáme do vlastností tohoto seznamu. Na následujícím obrázku si všimněte poslední vlastnosti „RowSource“. Tato vlastnost v překladu znamená zdroj řádků a právě do tohoto zdroje jsem doplnil název oblasti ze které se mají data do řádků seznamu doplnit.
- 34 -
Nyní máme dialogové okno připravené a máme do něj nastavené i přednastavené hodnoty. Otázkou však zůstává, jak tyto hodnoty přeneseme do odpovídajících buněk ve formuláři. Vlastní přesun z hodnot v polích do tabulky se děje po stisknutí tlačítka OK. Podívejme se teď na toto makro podrobněji.
Private Sub CommandButton1_Click() If TextBox1.Value = "" Then MsgBox "Musíte zadat jméno!" Exit Sub End If Range("D1") = TextBox1.Value Range("D2") = ComboBox1.Value Range("D3") = TextBox3.Value Zpracovatel.Hide End Sub
- 35 -
Jako první věc kterou makro po kliknutí na tlačítko OK udělá je, že zkontroluje zda vůbec nějaké jméno bylo zadáno. Pokud uživatel nezadal jméno, tedy textové pole zůstalo prázdné, tak zobrazí zprávu, že je nutné jméno zadat a nedovolí vám opustit dialogové okno. Teprve, když textové pole obsahuje nějaký text, tak provede uložení hodnot do tabulky. Do buňky D1 vloží hodnotu z prvního textového pole (Jméno), do buňky D2 vloží jméno organizačního útvaru vybraného ze seznamu a do buňky D3 vloží text vložený do druhého textového pole v dialogovém okně. Tímto textem je telefonní číslo. A zbývá nám poslední dialogové okno které má spoustu stejných prvků jako to co jsme si právě prošli, ale přece jen v sobě skrývá některé odlišnosti. Posledním dialogovým oknem které tedy budeme zkoumat je dialogové okno sloužící k zadání typu a množství zařízení do tabulky.
Většinu prvků v tomto dialogovém okně už známe a už jsme je použili, ale přesto je zde několik novinek. První novinkou je pole zdůvodnění a komentáře, ale od předchozích polí se liší tím, že má více řádek, komentář je tedy teoreticky omezen pouze množstvím znaků, které se vejdou do buňky v EXCELu. Aby bylo možné do textového pole psát do vícero řádků, které budou automaticky zalamovány podle konce okna, je nutné nastavit vlastnost MultiLině na hodnotu True.
Tím zajistíme, že se text bude na konci okna automaticky zalamovat podle jeho okraje. Další změnou oproti předchozímu dialogu je, že nám přibylo na levé dolní straně okna tlačítko pro - 36 -
uložení dat do formuláře. Formulář se totiž automaticky opakuje do doby než stisknu tlačítko „Konec zadávání.“. podívejme se tedy co se stane když stisknu tlačítko „Vlož zařízení do seznamu“.
Private Sub CommandButton1_Click() Rem Kontrola jestli je uveden název zařízení If ComboBox2.Value = "" Then MsgBox "Musíte zadat název zařízení!" Exit Sub End If Rem Nalezení první volné pozice v seznamu zařízení Sheets("Formulář").Activate Další_řádek Application.WorksheetFunction.CountA(Range("C:C")) + 1
=
Rem Vyplnění dat z dialogu do formuláře Cells(Další_řádek, 3) = ComboBox1.Value Cells(Další_řádek, 5) = ComboBox2.Value Cells(Další_řádek, 6) = ComboBox3.Value Cells(Další_řádek, 7) = TextBox1.Value Cells(Další_řádek, 11) = ComboBox4.Value Cells(Další_řádek, 12) = TextBox2.Value Rem Vynulování hodnot ve formuláři Rem ComboBox1.Value = "" ComboBox2.Value = "" ComboBox3.Value = "" TextBox1.Value = "" ComboBox4.Value = "" TextBox2.Value = "" End Sub Toto makro opět začíná kontrolou. Kontroluje jestli žadatel vložil název zařízení které chce dodat. Pokud žadatel nezadal název zařízení je zobrazeno okno s oznámením, že pokud mají
- 37 -
být údaje vloženy do tabulky musí zadat název zařízení. Pokud název zařízení existuje a je tedy co vkládat do tabulky makro pokračuje vyhledáním první volné buňky ve sloupci C. Pořadové číslo tohoto řádku je vloženo do proměnné se jménem „Další_řádek“. Tuto proměnnou použijeme při vyplňování dat do tabulky. Do buňky která má souřadnice „Další_řádek“ a sloupec 3 (C) se vloží jméno organizačního útvaru. Obdobně do řádku „Další_řádek“ a do sloupce 7 (H) se vloží počet zadaných zařízení. Tímto způsobem vložíme do tabulky všechny údaje které jsou v dialogovém okně zadány. Poslední část makra smaže všechny údaje které jsou v dialogovém okně zadány a připraví jej na další zadávání. Všimněte si, že v této části jsem označil do komentáře vynulování seznamu se jménem organizační jednotky. Pokud předpokládáme, že žadatel vyplňuje tabulku vždy za jeden útvar nemusíme tuto část odstraňovat a můžeme mu ji nechat vyplněnou od okamžiku kdy ji poprvé zadá. Při jakékoliv další změně bude zachován poslední zadaný název organizační jednotky. Pokud „Rem“ odstraníme, bude se i tato položka mazat po uložení dat do tabulky. Poslední tlačítko ke kterému musíme přiřadit makro je ukončení zadávání. Makro je velice jednoduché a podobná již byla popsána.
Private Sub CommandButton2_Click() Zarizeni.Hide End Sub Tak a tabulku máme kompletně připravenou a můžeme ji distribuovat mezi uživatele a čekat až se nám vyplněná vrátí.
- 38 -
3. část - Controlingové formuláře V předchozí kapitole jsme si ukázali jakým způsobem lze zformalizovat sběr informací. Jakým způsobem lze shromáždit větší množství dat v rámci firmy. Již vytvořený formulář použijeme v této kapitole a zaměříme se na zpracování obdržených informací. Výsledkem minulé kapitoly je několik souborů s daty o nákupech vybavení pro jednotlivé útvary firmy. Tyto soubory jsme postupně obdrželi pomocí e-mailu od vedoucích jednotlivých útvarů a uložili jsme si je na disk. Výsledkem sběru informací může být například seznam souborů uvedený na následujícím obrázku.
Při ukládání souborů z e-mailu si musíme dát pozor abychom každý soubor měli v adresáři určeném pro hromadné zpracování pouze jednou. Značně nám to ulehčí orientaci v platných souborech. Nahrazené soubory pak můžeme přesouvat do adresáře sloužícího k archivaci.
Zadání úkolu Jistě se dokážete vžít do reálné situace kdy na Vás vedoucí tlačí aby informace o tom kolik souborů bylo posláno a jaká obsahují data měl na stole co nejdříve. Vy máte buď možnost ručně otevřít každý soubor a data v něm obsažená kopírovat do souboru obsahujícího všechna data ze všech doručených souborů a nebo si přesun dat do sumárního souboru zautomatizovat.Samozřejmě, že automatizovaná verze je pružnější a spolehlivější. Proto si ukážeme jak ji připravit a následně i použít. Stejně jako v minulé kapitole musíme začít s definicí požadavků na naši sumární tabulku. Nejprve si sepišme funkční požadavky: • • •
interaktivní vedení tvorbou sumární tabulky informace o počtu již zpracovaných souborů možnost ruční editace všech dat v sumární tabulce
- 39 -
Následující požadavky patří do kategorie věcných požadavků. • • • •
možnost výběru souborů které budeme zpracovávat údaje budou automaticky načteny do společné tabulky chceme mít možnost dodatečně přidávat soubory k již načteným sumární soubor bude obsahovat předem definované výkazy a statistiky
Tvorba sumární tabulky Nyní můžeme tedy přistoupit k tvorbě sumární tabulky. Nejdříve si otevřete prázdný sešit („Soubor“ -> „Nový“). Jako první si pak vytvoříme list na kterém budeme shromažďovat data z jednotlivých dílčích tabulek. Tento list si pojmenujeme „Data“. Údaje které zde shromáždíme nám budou sloužit pro pozdější tvorbu výkazů a statistik. Proto je důležité, aby data a jejich struktura obsahovaly všechny v budoucnu potřebné informace. My využijeme již definovaných dat v souborech které sloužily pro sběr informací a do sumárního souboru si nadefinujeme ty sloupce, které jsou obsaženy v již zaslaných souborech.
Struktura shromažďovaných dat bude následující : • • • • • • • • • •
identifikační číslo požadavku v zaslaném souboru číslo žádajícího útvaru jméno žádajícího útvaru nákladové středisko útvaru název požadovaného zařízení požadovaný měsíc dodání počet kusů plánovaná cena za kus plánovaná částka za všechny kusy doba odepisování
- 40 -
• • • • • • • •
hodnota odpisu v plánovaném roce priorita pro pořízení zdůvodnění požadavku jméno žadatele útvar žadatele telefon žadatele datum vyplnění datum kdy byla provedena sumarizace
Všimněte si, že údaje o žadateli máme v jednotlivých formulářích uvedeny v záhlaví tabulky s daty. Do sumární tabulky tyto údaje budeme vkládat ke každému záznamu. Důvodem je aby u každého záznamu který budeme analyzovat byly všechny relevantní informace. Teď, když máme připraven list do kterého budeme ukládat data, můžeme přistoupit k tvorbě mechanismu, který zajistí načtení všech položek z jednotlivých souborů. Připravíme si další list s názvem „Soubory“. Tento list nám bude sloužit pro přehled o zpracovávaných souborech. Oblast, do které se budou jména zpracovávaných souborů ukládána si pojmenujeme stejně jako název listu. Pro připomenutí si uvedeme detailní postup : označíme si oblast B4:B104, místo pro 100 zpracovávaných souborů 1. menu „Vložit“ -> “Název” -> “Definovat” 2. do dialogového okna vložit název oblasti a její rozsah
- 41 -
Tímto krokem máme vše připravené pro tvorbu makra které nám připraví názvy souborů které budeme postupně zpracovávat. Připomeňme si jak vyvolat editor maker. Z menu „Nástroje“ vyberte položku „Makro“ a z ní pak zvolte „Editor jazyka Visual Basic“. U této položky můžete vidět i klávesovou zkratku ALT+F11. Pokud máte v rámci firemní počítačové sítě zablokován přístup k položce „Makro“ pomocí bezpečnostních nastavení pak můžete stále vyvolat editor jazyka VBA pomocí klávesové zkratky ALT+F11. Dá se říci, že se jedná o bezpečnostní chybu která bude jistě odstraněna. Připravit makro které nám umožní výběr souborů z disku se může na první pohled zdát jako komplikovaná záležitost. Obzvláště v případě pokud chceme aby bylo možné procházet mezi adresáři, manipulovat s nimi, umožnit vícenásobný výběr souborů a podobně. Naštěstí můžeme využít již vestavěných dialogových oken. V našem případě použijeme okno které se používá pro otevření souboru. Názvy souborů, které vybereme pomocí tohoto dialogu, uložíme na již připravený list „Soubory“. Jméno dialogu, které použijeme při psaní makra je „GetOpenFilename“. Parametry které použijeme při volání dialogu jsou následující : • titulek okna – „Title - Ttulek • filtr podle kterého se nám zobrazí soubory – „FileFilter - Filtr • umožnění výběru více souborů – „MultiSelect“ Seznam označených souborů pak bude dialogovým oknem předán do proměnné „Jméno_souboru“. Kód pro vyvolání dialogového okna pro výběr souboru a umístění vybraných souborů do listu „Soubory“ najdete v „Modulu1“ a je následující : Sub Vyber_soubory_pro_import_dat() Rem Vyplní oblast listu názvy souborů které se mají naimportovat do společné tabulky Dim Filtr As String Dim Jméno_souboru As Variant Dim Titulek As String Dim i As Integer Rem Vymazání oblasti pro umístění názvů souborů (Soubory = název oblasti v tabulce) Sheets("Soubory").Select Range("Soubory").Clear Range("A1").Select Rem Při výběru nabídni možnost souborů XLS a * Filtr = "Excel Files (*.xls),*.xls," & "All Files (*.*),*.*"
- 42 -
Rem Nastavení hlavičky dialogového okna Titulek = "Vyber soubory pro import dat :" Rem Otevření dialogového okna Jméno_souboru = Application.GetOpenFilename(FileFilter:=Filtr, Title:=Titulek, MultiSelect:=True) Rem Zpráva při zrušení okna nebo pokud nejsou vybrány žádné soubory If Not IsArray(Jméno_souboru) Then Počet_souborů = 0 MsgBox "Nebyly vybrány žádné soubory." Exit Sub End If Rem uložení jmen souborů do pracovního listu Range("Soubory").Select For i = LBound(Jméno_souboru) To UBound(Jméno_souboru) ActiveCell.Offset(i, 0) = Jméno_souboru(i) Next i Počet_souborů = UBound(Jméno_souboru) - LBound(Jméno_souboru) + 1 Range("A1").Select End Sub Výsledné dialogové okno můžete vidět na následujícím obrázku. Dialog má námi definovaný titulek, nabízí soubory typu xls a nabízí všechny možnosti které nabízí okno pro otevírání souborů.
- 43 -
V kódu jsou použity dvě nezvyklé funkce – LBound a UBound. Obě funkce se týkají zjišťování velikosti pole. Jejich použití souvisí s proměnnou „Jméno_souboru“ a předáním dat o vybraných souborech z dialogu do excelu. Při ukončení dialogu je seznam označených souborů zapsán do proměnné „Jméno_souboru“ a to takovým způsobem, že první vybraný soubor má číslo 0, druhý 1 a tak dále. Proměnná „Jméno_souboru“ se tedy chová jako pole. „Jméno_souboru(0)“ = Ekonomický_úsek.xls „Jméno_souboru(1)“ = Obchodní_úsek.xls „Jméno_souboru(2)“ = Personální_úsek.xls … Funkce LBound (lower - nejnižší) nám vrátí nejnižší hodnotu indexu pole. V našem případě se jedná o číslo 0. Funkce UBound (upper - nejvyšší) nám vrátí nejvyšší hodnotu indexu pole. V případě, že vybereme všechny soubory, které jsou uvedeny v příloze pak vrácená hodnota je číslo 11. Rozdílem těchto dvou hodnot zvýšený o jedničku získáme počet souborů vybraných v dialogovém okně. Výstupem výše uvedeného makra je seznam souborů které budeme dále zpracovávat.
Nyní můžeme pokračovat asi nejobtížnější částí přípravy sumarizačního formuláře. Touto částí je zpracování dílčích souborů a zápis v nich obsažených dat do sumarizačního souboru. Celý problém si rozdělíme na několik dílčích částí a ty budeme řešit postupně. Tento princip nám umožní se v přípravě kódu neztratit a vše dovést k úspěšnému konci. Kroky ke správnému zpracování jsou následující : 1. 2. 3. 4. 5. 6. 7.
vstupem do procedury bude jméno dílčího souboru včetně cesty kde se nachází provedeme otevření souboru s dílčími daty zkopírujeme si data z dílčího souboru do pomocného listu v sumarizační tabulce uzavřeme soubor s dílčími daty v sumarizačním souboru si přesuneme data z pomocného listu do listu s daty smažeme obsah pomocného listu vrátíme se do stavu před vstupem do procedury
- 44 -
Kód který budeme rozebírat v následující části najdete v „Modulu1“ Krok 1 - vstupem do procedury bude jméno dílčího souboru včetně cesty kde se nachází Aby procedura pracovala se jménem souboru který ji předáme musíme nadefinovat vstupní proměnnou která bude toto jméno obsahovat. Sub Načti_data_ze_souboru(Jméno As String) Procedura „Načti_data_ze_souboru“ bude mít jako vstupní parametr „Jméno“ (jméno souboru který bude touto procedurou zpracováván). Jméno tohoto souboru bude předáván do procedury jako řetězec („String“) Krok 2 - provedeme otevření souboru s dílčími daty Vlastní otevření souboru s daty je jednoduchou záležitostí. U objektu „Workbooks“ zavoláme metodu „Open“ u které určíme jako jméno otevíraného souboru („FileName“) naši proměnnou „Jméno“. Tato proměnná bude obsahovat jméno a cestu k souboru který se má otevřít a zpracovat. Workbooks.Open FileName:=Jméno Pro usnadnění práce se sumarizačním a dílčím datovým souborem provedeme před otevřením dílčího datového souboru několik úkonů. a) jméno sumarizačního souboru si uložíme do proměnné „Sumarizace“ b) jméno dílčího datového souboru si uložíme do proměnné „Data“ c) kvůli rychlejšímu zpracování vypneme překreslování obrazovky („ScreenUpdating“) Výsledný kód je následující :
Dim Sumarizace As String Dim Data As String Rem Otevření sešitu s daty a uložení jmen otevřených souborů pro další použití Application.ScreenUpdating = False Sumarizace = ThisWorkbook.Name Worksheets("Temp").Visible = True Workbooks.Open FileName:=Jméno Data = Application.ActiveWorkbook.Name Nesmíme zapomenout, že pro správný průběh kódu musíme mít vytvořený pomocný list se jménem „Temp“ do kterého budeme přesouvat data z dílčího souboru.
- 45 -
Zároveň si na tomto listu můžeme vytvořit vzorce. Tyto vzorce nám poslouží při přesunu dat z hlavičky dílčích souborů do sumární tabulky. V hlavičce dílčích souborů máme údaje o tom kdo vypracoval dílčí požadavky, telefonní spojení a identifikaci útvaru. Zatímco tyto údaje jsou umístěny na listu svisle, údaje o požadavcích jsou umístěny vodorovně. Pro snadnější manipulaci s těmito daty si je pomocí vzorců přesuneme do vodorovné polohy ke každému řádku s požadavkem. Vzorce vložte do oblasti od buňky „N5“ až po buňku „R30“. Vzorce v jednotlivých buňkách budou následující : • • • • •
„N5“ “O5” “P5” “Q5” “R5”
=$D$1, do řádku s položkou přidáme informaci o tom, kdo formulář vyplnil =$D$2, telefonní číslo žadatele =$D$3, útvar žadatele =$M$1, datum kdy formulář naposledy editoval =NYNÍ(), datum kdy jsme provedli sumarizaci
Vzorce z výše uvedených buňek zkopírujte až do řádku 30. V tomto případě využíváme znalosti kde se která data nacházejí a pomocí vzorců si je přeneseme do míst která vyhovují nám. Krok 3 - zkopírujeme si data z dílčího souboru do pomocného listu v sumarizační tabulce V tomto kroku si nejprve zkopírujeme data z dílčího souboru (jméno souboru máme uloženo z druhého kroku v proměnné „Data“) do schránky. Rem Kopírování oblasti z datového sešitu Workbooks(Data).Sheets("Formulář").Range("A1:M30").Copy Možná vás napadlo, že výše popsaný postup má slabinu v tom, že oblast kterou kopírujeme je pevně vymezena buňkami A1:M30. Tato slabina opravdu existuje a je možné výše popsaný kód nahradit kódem který zkopíruje libovolně velkou souvislou oblast buněk.
Range(“A1“).Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Jedná se o stejný případ jako kdybychom na buňce A1 stiskli kombinaci kláves SHIFT + CTRL + END. Sestavení tohoto upraveného kódu si můžete jednoduše vyzkoušet pomocí záznamového makra. Z mých zkušeností mohu říci, že ve většině případů výběr opravdu proběhne podle představ uživatele, ale v případě, že jsou na listu v těsné blízkosti i jiné oblasti dat nelze se na tento výběr spolehnout protože velice rád zahrnuje i sousedící souvislé oblasti plných buněk.
- 46 -
Teď provedeme přípravu vložení buněk zkopírovaných do schránky do sumarizačního souboru (jméno sumarizačního souboru máme z druhého kroku uložené v proměnné „Sumarizace“). Nejdříve si vypneme hlášení excelu o tom, že ve schránce je velké množství dat a jestli chceme tyto data ze schránky vymazat v případě opuštění souboru z kterého byly kopírovány. Application.DisplayAlerts = False Teď se přepneme do sešitu se sumárními daty a nastavíme si list „Temp“ jako aktivní. Workbooks(Sumarizace).Activate Sheets("Temp").Select Range("A1").Select Na závěr můžeme provést vlastní vložení dat ze schránky do sumarizačního souboru.
Rem Vložení dat do sumarizačního sešitu jako hodnoty Selection.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlPasteSpecialOperationNone, _ SkipBlanks:=True, Transpose:=False Vkládání provádíme tak aby vložený obsah buněk neobsahoval vzorce, ale pouze hodnoty (Paste:=xlPasteValues). Tento kód lze také jednoduše získat pomocí záznamového makra. Krok 4 - uzavřeme soubor s dílčími daty Teď již můžeme zavřít soubor s dílčími daty a nadále pracovat pouze se sumarizačním souborem. Zároveň je možné vrátit zpět případná upozornění excelu (DisplayAlerts).
Rem Uzavření sešitu s daty Windows(Data).Activate ActiveWindow.Close (False) Application.DisplayAlerts = True Klauzule „False“ při uzavírání sešitu nám zajistí, že se excel nebude ptát jestli je nutné ukládat změny. My víme, že jsme žádné změny neprováděli a proto není nutné soubor před uzavřením ukládat.
- 47 -
Krok 5 - v sumarizačním souboru si přesuneme data z pomocného listu do listu s daty Nejobtížnější částí tohoto kroku bude najít v seznamu sumárních dat první volnou buňku. Postupujme však od začátku. Nejdříve si z listu „Temp“ vložíme data do schránky.
Workbooks(Sumarizace).Sheets("Temp").Range("A6:R35").Copy Potom si musíme aktivovat list data a najít první prázdnou buňku. Od této buňky budeme data z dočasného listu vkládat. Tento postup nám zajistí, že budeme mít data ze všech dílčích souborů naskládána pěkně pod sebou. Určitě již tušíte, že ke zpracování výkazů pak bude možné použít kontingenčních tabulek. První prázdnou buňku najdeme pomocí cyklu „Do“ – „Loop“. Slovně popsáno funguje cyklus následujícím způsobem. Dokud buňka která je momentálně aktivní (na kterou ukazuje kurzor – ActiveCell.Offset(0,0)) není prázdná tak posouvej ukazatel aktivní buňky (kurzor) vždy o jeden řádek dolů (ActiveCell.Offset(1,0)).
Rem Najdi první prázdnou buňku Sheets("Data").Select Range("B1").Select Do While ActiveCell.Offset(0, 0).Value <> "" ActiveCell.Offset(1, 0).Select Loop Po ukončení tohoto cyklu máme kurzor na první prázdné buňce ve sloupci „B“ na listu „Data“. Teď je možné data ze schránky vložit na toto určené místo jen je nutné data vkládat od sloupce „A“ a ne „B“. Vložení provedeme pomocí následujícího kódu.
ActiveCell.Offset(0, -1).Select Selection.PasteSpecial Paste:=xlValues, _ Operation:=xlNone, SkipBlanks:=False, _ Transpose:=False Opět data vkládáme jako hodnoty i když to již není nezbytně nutné, protože vzorců jsme se zbavili v předchozím kroku. Tento zápis vyplývá především díky tomu, že je velice snadné zkopírovat již jednou napsanou část kódu a vložit ji na místo kde potřebujeme.
- 48 -
Když bychom si pozorně prohlédli výsledek našeho dosud napsaného kódu tak zjistíme, že při přenášení dat jsme přenášeli i identifikační čísla jednotlivých požadavků z dílčích souborů. Tyto identifikační čísla jsou nastavena na 1 – 25. My při kopírování přenášíme všech 25 řádků i když neobsahují žádná data. Proto je nutné přebytečné (prázdné) řádky odstranit. Rem Smaž přebytečné řádky Range("B1").Select Do While ActiveCell.Offset(0, 0).Value <> "" ActiveCell.Offset(1, 0).Select Loop ActiveCell.Offset(0, -1).Select Range(ActiveCell, ActiveCell.Offset(100, 100)).Clear V kódu mažeme pro jistotu oblast 100 x 100 buněk nacházející se pod poslední buňkou obsazenou nějakými daty. Krok 6 - smažeme obsah pomocného listu Smazání obsahu listu „Temp“ je již snadnou záležitostí.
Rem Vymazání oblasti s daty Sheets("Temp").Select Range("A1:M30").Clear Krok 7 - vrátíme se do stavu před vstupem do procedury V tomto kroku vrátíme vše do stavu v jakém jsme se zpracováním dílčího souboru začali. Není nutné aby list „Temp“ byl vidět a proto jej můžeme skrýt (Visible = False) a znovu obnovíme překreslování obrazovky (ScreenUpdating = True)
Rem Návrat na list odkud byla procedura volána Sheets("Soubory").Select Worksheets("Temp").Visible = False Application.ScreenUpdating = True Tímto posledním krokem jsme uzavřeli zpracování dílčího souboru a je možné si prohlédnout finální kód.
- 49 -
Sub Načti_data_ze_souboru(Jméno As String) Dim Sumarizace As String Dim Data As String Rem Otevření sešitu s daty a uložení jmen otevřených souborů pro další použití Application.ScreenUpdating = False Sumarizace = ThisWorkbook.Name Worksheets("Temp").Visible = True Workbooks.Open FileName:=Jméno Data = Application.ActiveWorkbook.Name Rem Kopírování oblasti z datového sešitu Workbooks(Data).Sheets("Formulář").Range("A1:M30").Copy Rem Vložení dat do sumarizačního sešitu jako hodnoty Workbooks(Sumarizace).Activate Sheets("Temp").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlPasteSpecialOperationNone, _ SkipBlanks:=True, Transpose:=False Rem Uzavření sešitu s daty Windows(Data).Activate ActiveWindow.Close (False) Application.DisplayAlerts = True Rem Zpracování nakopírovaných dat Workbooks(Sumarizace).Sheets("Temp").Range("A6:R35").Copy Rem Najdi první prázdnou buňku Sheets("Data").Select Range("B1").Select Do While ActiveCell.Offset(0, 0).Value <> "" - 50 -
ActiveCell.Offset(1, 0).Select Loop ActiveCell.Offset(0, -1).Select Selection.PasteSpecial Paste:=xlValues, _ Operation:=xlNone, SkipBlanks:=False, _ Transpose:=False Rem Smaž přebytečné řádky Range("B1").Select Do While ActiveCell.Offset(0, 0).Value <> "" ActiveCell.Offset(1, 0).Select Loop ActiveCell.Offset(0, -1).Select Range(ActiveCell, ActiveCell.Offset(100, 100)).Clear Rem Vymazání oblasti s daty Sheets("Temp").Select Range("A1:M30").Clear
Rem Návrat na list Parametry Sheets("Soubory").Select Worksheets("Temp").Visible = False Application.ScreenUpdating = True End Sub Pokud si tuto proceduru vyzkoušíte na souboru připraveném v minulé kapitole tak zjistíte, že při každém otevření dílčího souboru se automaticky spustí makro definované v dílčím souboru. Výsledkem tedy je, že se nám pokaždé zobrazí nabídka kterou jsme vytvářeli v minulé kapitole.
- 51 -
To je velice nepříjemné protože musíme u každého dílčího souboru stisknout tlačítko k ruční editaci tabulky aby náš kód pro přenos dat do sumarizačního souboru mohl pokračovat dále. Nepříjemnost je možné odstranit pomocí kousku kódu který vložíme do dílčích souborů. Tuto úpravu je ideální udělat ještě před tím, než se soubory pro vyplnění rozešlou žadatelům. Úprava spočívá v identifikaci již v excelu otevřeného souboru. Pokud tímto souborem je „Formuláře_sumarizace.xls“ tak již nespouštěj v dílčím souboru „Rozcestník“, ale předej řízení zpět do sumarizačního souboru. Následující kód je tedy nutné přidat do souborů určených k rozesílání jednotlivým žadatelům. Private Sub Workbook_Open() Rem Kontrola přítomnosti sumarizačního souboru Dim X As Object On Error Resume Next Set X = Workbooks("Formuláře_sumarizace.xls") If Err = 0 Then GoTo ExitSub Rem Původní kód Sheets("Formulář").Select Range("A1").Select Rozcestnik.Show ExitSub: End Sub - 52 -
V tomto okamžiku máme již jádro našeho sumarizačního souboru připravené. Teď je načase připravit pohodlné ovládání. Začneme přípravou dialogového okna které nám umožní pohodlně vybrat dílčí soubory ke zpracování a podá nám základní informaci o tom kolik máme souborů vybraných. Dialogové okno může vypadat například jako to na následujícím obrázku.
Dialogové okno obsahuje jedno tlačítko („CommandButton1“) a dvě textové položky. „Label1“ s obsahem „Počet vybraných souborů :“ a „Label2“ které nám bude zobrazovat kolik soborů jsme vybrali. Kód přiřazený k tlačítku je velice jednoduchý. Private Sub CommandButton1_Click() Call Vyber_soubory_pro_import_dat Label2.Caption = Počet_souborů + 1 End Sub Tento kód je proveden v okamžiku když nastane událost „Click“. To znamená pokud myší klikneme na tlačítko, nebo pokud stiskneme „Enter“ když je tlačítko aktivní. Kód obsahuje volání procedury pro výběr souborů a podle počtu vybraných souborů změní text textového pole „Label2“. Určitě vás zarazilo, že počet souborů je zvětšen o jedničku. V našem případě máme v adresáři 12 souborů. Excel jim ale přiřazuje čísla podle pravidla, že první je 0, druhý 1, třetí 2 a tak dále. Excel tedy přiřadí nejvyšší číslo 11 a ne 12. Další tlačítko které si připravíme bude tlačítko na načtení dat z vybraných dílčích souborů do sumarizačního souboru. Jméno tohoto tlačítka je „CommandButton2“. Událost kterou budeme zpracovávat bude opět „Click“. Po stisknutí tohoto tlačítka musíme projít názvy všech vybraných dílčích souborů. Postupně je otevírat a pomocí již připraveného makra přenášet data do sumarizačního souboru. Kód pomocí kterého se vše provede je následující. Private Sub CommandButton2_Click() Dim X As Integer Dim Název_souboru As String - 53 -
For X = 0 To Počet_souborů Sheets("Soubory").Select Range("B5").Select Název_souboru = ActiveCell.Offset(X, 0) Call Načti_data_ze_souboru(Název_souboru) Next X End Sub
V případě, že máte málo výkonný počítač zjistíte, že během provádění tohoto kódu vás nic neinformuje o tom jak zpracování dílčích souborů pokračuje a vy začínáte být nervózní zda se počítač nezasekl. Ale i v případě, že máte vysoce výkonný počítač a celá operace netrvá déle něž pár vteřin, musíte uznat, že by bylo efektní kdyby vás Excel informoval kolik procent souborů již zpracoval a vše ještě zobrazil pěkně graficky.
Podívejme se jak takovýto objekt vytvořit a následně pak použít. Výše uvedené dialogové okno se skládá ze čtyř základních prvků. • • • •
tělo dialogového okna, tento prvek již důvěrně známe z předchozích příkladů textové položky která nás informuje o tom, že se zpracovávají data z dílčích souborů prvku „Frame“, v nadpisu tohoto prvku jsou zobrazena % zpracování prvku „ProgressBar“
První tři prvky najdete ve standardní nabídce „Toolbox“ v editoru VBA. Prvek „ProgressBar“ si však budeme muset do nabídky „Toolbox“ přidat. - 54 -
1. v editoru VBA si zvolte menu „View“ a zkontrolujte zda máte zobrazené menu „Toolbox“ 2. v menu „Toolbox“ stiskněte pravé tlačítko myši a zvolte z nabídky položku „Additional controls“
3. na obrazovce se vám objeví nabídka s dalšími dialogovými prvky, z množství nabízených prvků vyberte „Microsoft ProgressBar Control“
4. v menu „Toolbox“ vám přibude nová ikona zobrazující prvek „ProgressBar“ tento prvek nám umožní zobrazit pruh, který se bude postupně zabarvovat v závislosti na tom kolik souborů je již zpracováno 5. nyní můžeme tento prvek umístit do dialogového okna Ve VBA editoru by měl být výsledek po drobných úpravách vlastností jednotlivých prvků následující. - 55 -
,
Nyní když již máme potřebný dialog vytvořený můžeme k němu vytvořit i potřebný kód. Abychom správně sestavili všechny události které musí nastat seřadíme si je do následujících kroků. 1. z nabídky v menu klikneme na položku „Přidej data do tabulky“ 2. zkontrolujeme jestli máme vybrány soubory které budeme zpracovávat 3. zobrazíme si dialogové okno s oznámením kolik procent již máme zpracováno 4. zpracujeme soubory a zároveň aktualizujeme data o pokroku ve zpracovávání 5. uzavřeme okno s informací o postupu zpracování 6. vrátíme řízení původní nabídce Předchozí kód pro načtení souborů musí být změněn následujícím způsobem. Private Sub CommandButton2_Click() Call Zpracování_datových_souborů End Sub Tento kód najdete u formuláře „UserForm1“. V „Modulu1“ pak najdete vlastní proceduru která provede kontrolu zda máme vybrané soubory pro zpracování. Pokud soubory existují zobrazí dialogové okno s prvkem „ProgressBar“. V opačném případě pak ukončí proceduru s chybovým hlášením, že nebyly vybrány žádné soubory ke zpracování. Sub Zpracování_datových_souborů() If Počet_souborů = 0 Then MsgBox ("Nebyly vybrány žádné soubory ke zpracování !") Exit Sub Else End If UserForm2.Show Unload UserForm2 End Sub
- 56 -
Předchozími dvěmi částmi kódu jsme provedli všechny kroky výše uvedeného seznamu kromě kroku 4. Tento krok se provede v okamžiku kdy aktivujeme „UserForm2“. Pomocí cyklu „For“ – „Next“ postupně zpracujeme všechny soubory které se nacházejí na listu „Soubory“ od buňky „B5“ směrem dolů. V průběhu zpracovávání souborů budeme také aktualizovat dialogové okno s informacemi o postupu zpracování. Private Sub UserForm_activate() Dim x As Integer Dim Název_souboru As String Dim Hotovo As Single For x = 0 To Počet_souborů Rem Nalezení jména souboru ke zpracování Sheets("Soubory").Select Range("B5").Select Název_souboru = ActiveCell.Offset(x, 0) Rem Aktualizace postupu zpracování Hotovo = x / Počet_souborů ProgressBar1.Value = Hotovo Frame1.Caption = Format(Hotovo, "0%") UserForm2.Repaint ProgressBar1.Refresh Rem Provedení zpracování dílčího souboru Call Načti_data_ze_souboru(Název_souboru) Next x UserForm2.Hide End Sub Touto částí kódu jsme ukončili sehrávání dat z jednotlivých dílčích souborů do souboru sumárního.
- 57 -
Teď si připravíme makro na jednoduchý výmaz již zapsaných dat do sumární tabulky. V současném stavu pokud budeme vybírat další a další soubory tak se nám budou načítat k již sumarizovaným datům. Tento postup je dobrý pro případ, že nám data chodí postupně a my si je postupně můžeme sehrávat. Pokud bychom ale chtěli data načíst znovu od začátku tak nemůžeme. Výmaz načtených dat nám umožní data znovu načíst bez ohledu na předchozí obsah souboru. V dialogovém okně „Načtení datových souborů“ si připravíme další tlačítko. toto tlačítko bude mít název „Výmaz existujícíhc dat“ („CommandButton5“).
K tomuto tlačítku přiřadíme kód který vymaže oblast dat na listu „Soubory“ a zároveň vymaže seznam posledních souborů určených k načtení.
Private Sub CommandButton5_Click() Call Výmaz_existujících_dat Label2.Caption = 0 End Sub
Sub Výmaz_existujících_dat() Dim Sumarizace As String Application.ScreenUpdating = False Sumarizace = ThisWorkbook.Name Workbooks(Sumarizace).Activate Sheets("Data").Range("A3:R65536").Clear Sheets("Soubory").Range("B:B").Clear Application.ScreenUpdating = True End Sub
- 58 -
Posledním tlačítkem bude tlačítko na opuštění dialogového okna a umožnění ruční editace tabulek. Tlačítko které vytvoříme pod názvem „Editace tabulky“ má označení „CommandButton4“
Private Sub CommandButton4_Click() UserForm1.Hide End Sub Tímto krokem jsme ukončili část týkající se programování.
Tvorba reportingových výkazů Vraťme se zpět od programování k praktickému použití sumarizovaných dat. Sumarizovaná data lze v praxi použít pro minimálně čtyři účely. Každý účel vyžaduje jinou strukturu dat, ale věcný obsah bude stále stejný. Z dat obsažených v našem sumarizačním souboru lze připravit reporty pro následující účely : • • • • •
report sloužící k rozhodování o tom které zařízení bude nakoupeno a které nikoliv report sloužící finančnímu řediteli jako podklad pro zpracování plánu hotovostních toků v podniku report pro finančního ředitele ve kterém bude mít připraven plán odpisů pro plánovaný rok report pro vedoucího oddělení nákupu který bude sloužit k plánování nákupů a k vyjednávání co nejlepších cen s dodavateli dalším reportem by měla být zpětná vazba pro žadatele vybavení zda jejich požadavek byl schválen nebo byl zamítnut.
- 59 -
Report sloužící k rozhodování V průběhu plánovacího procesu je téměř pravidlem, že požadavky zaslané jednotlivými útvary (Botoom-Up) téměř vždy překračují představy managementu nebo majitelů firmy (Top-Down). Díky tomuto rozporu dochází pravidelně ke krácení požadavků jednotlivých žadatelů. Naším úkolem je připravit report pomocí kterého bude možné snadno rozhodnout o tom které požadavky budou realizovány a které nikoliv. Vy jako pracovník kontrolingu se musíte umět vžít do role managerů kteří budou rozhodovat a report připravit tak aby měli po ruce všechny potřebné údaje. Nejlepší způsob jak se takového úkolu zhostit je představit se sám sebe v pozici „rozhodovatele“ a připravit report tak aby vyhovoval vám. Pak je velká pravděpodobnost, že bude vyhovovat i vašim nadřízeným. Výsledné položky reportu by měli obsahovat následující údaje. • • • • •
jaká zařízení požadují žadatelé v jakém množství za jaký objem peněžních prostředků si organizační útvary zařízení požadují jak mají požadovaná zařízení rozdělena do priorit jak zdůvodňují svoje požadavky
Postup rozhodování by s těmito údaji mohl vypadat následovně : 1. manager nejdříve zjistí zda požadavky sebrané zdola převyšují možnosti rozpočtu, pokud ano postupuje dalším krokem, v opačném případě může všechny požadavky schválit 2. do vymezeného rozpočtu se pokusí vejít pomocí rychlého krácení, toto krácení spočívá v neschválení poslední a popřípadě i předposlední priority, pokud by ani tyto opatření nepomohla je nutné přistoupit ke třetímu kroku 3. je nutné provést detailní revizi požadavků, počty požadovaných kusů, zdůvodnění, tuto fázi je nutné dělat ve spolupráci s jednotlivými žadateli Teď když máme představu jak by měl report vypadat a jak by mohlo vypadat rozhodování můžeme začít připravovat konkrétní podobu reportu. Vzhledem k tomu, že máme data ze všech dílčích souborů naskládána na jednom listu sumarizačního souboru můžeme pro tvorbu reportu použít kontingenční tabulky. Tento nástroj nám umožní uspořádat data do takové podoby jaká je požadována. Kontingenční tabulku připravíme následujícím způsobem. 1. z menu „Data“ vyberte položku „Kontingenční tabulka a graf“ 2. na obrazovce uvidíte „Průvodce kontingenční tabulkou a grafem (1/3)“ 3. naše data k analýze se nacházejí v aplikaci Microsoft Excel a proto označíme právě tuto volbu 4. ve stejném dialogovém okně označíme, že kontingenční sestava bude ve formě tabulky ne grafu 5. klikněte na tlačítko „Další“ 6. objeví se druhá část „Průvodce kontingenční tabulkou a grafem (2/3)“ 7. kurzor umístíme do políčka s názvem „Oblast:“ 8. v místě záložek jednotlivých listů excelu klikneme na list „DATA“ 9. klikněte na buňku „A1“ - 60 -
10. stiskněte kombinaci kláves CTRL+SHIFT+END, díky této kombinaci kláves se vám jako oblast označí veškerá data na tomto listu, pro případ, že budeme data doplňovat můžete označenou oblast rozšířit o několik řádků směrem dolů 11. klikněte na tlačítko „Další“ 12. na otázku průvodce kde chceme kontingenční tabulku umístit odpovězte, že ji chcete umístit na „Nový list“ 13. klikněte na tlačítko „Dokončit“ Kontingenční tabulku máme vytvořenou. Teď je nutné ji naplnit daty tak aby odpovídala výše uvedeným požadavkům na report Přetahování položek proveďte následujícím způsobem. Do oblasti řádkových polí přetáhněte tyto položky : • „Jméno žádajícího útvaru“ • „Název zařízení“ • „Zdůvodnění požadavku“ Do oblasti sloupcových polí patří položka : •
„Priorita“
Do oblasti datových položek umístíme : • •
„Celková částka“ „Počet kusů“
Datová pole se vám automaticky umístí na konec řádkových polí. Aby informace byly přehledně uspořádány přesuňte položku „Data“ na spodní okraj nadpisů sloupcových polí. Položka „Data“ se vám potom objeví vedle položky „Priorita“. Datová pole jsou nastavena tak, aby ukazovala počet hodnot. Toto nastavení je pro naše účely nepoužitelné a proto si toto nastavení změníme na součty datových polí. 1. umístěte kurzor do libovolného pole v datové oblasti a stiskněte pravé tlačítko na myši 2. z nabídky vyberte položku „Nastavení pole“ 3. v zobrazeném dialogovém okně klikněte na pole „Součet“ a stiskněte „OK“ Stejný postup použijeme i pro druhou datovou položku „Počet kusů“. Takto připravená tabulka sice obsahuje všechny potřebné údaje, ale nevypadá pěkně. S formátem tabulky je možné libovolně manipulovat. Je možné měnit šířku a výšku řádků, typ písma, barevné schéma atp… Pokud provedete svoje úpravy vzhledu tabulky nezapomeňte na jednu důležitou věc. Při každé aktualizaci tabulky použije excel automatický formát a všechny vámi pracně nastavené detaily formátu tabulky jsou ztraceny. Tomuto se
- 61 -
lze vyhnout pokud zrušíte v nastavení použití automatického formátu v nastavení možností kontingenční tabulky.
Report sloužící jako podklad pro vytvoření plánu hotovostních toků Tento report by měl sloužit finančnímu řediteli k tomu aby věděl kdy a jaké výdaje jej očekávají. V praxi se může stát, že při výplatě ročních odměn si může firma sáhnout na dno svého běžného účtu. V případě, že finanční ředitel ví o této skutečnosti dopředu, může dát impuls k tomu, aby nákup některých zařízení byl o měsíc odložen. Vzhledem k cenám kontokorentních rámců je plánování a řízení hotovostních toků pro firmu velice důležité. Když již víme k čemu by měl report sloužit není problém takovýto report z našich sumarizovaných dat sestavit. Postupovat budeme stejně jako v předchozím případě, jen umístění jednotlivých polí kontingenční tabulky bude jiné. Do oblasti řádkových polí přetáhněte tyto položky : • •
„Požadovaný měsíc dodání“, předpokládáme, že měsíc dodání se rovná měsíci kdy bude dodané zboží i uhrazeno „Priorita“, toto pole slouží k lepší orientaci v případě, že proběhne krácení požadavků formou škrtnutí některé z priorit
Do oblasti sloupcových polí patří položka : • •
„Číslo žádajícího útvaru“ „Název žádajícího útvaru“, obě položky jsou pouze informativní
Do oblasti datových položek umístíme : •
„Celková částka“, bude se jednat o sumu peněz, kterou bude finanční ředitel v každém měsíci potřebovat na pokrytí odsouhlasených požadavků
Opět budeme muset nastavit data do stavu součtů a před formátováním vypnout v možnostech kontingenční tabulky funkci automatického formátování. Pokud vytvoříte novou kontingenční tabulku formou kopírování listu s již existující tabulkou ušetříte si nejen námahu s pracným označováním oblasti dat které chcete analyzovat, ale i s formátováním tabulky. Další velkou výhodou je i úspora paměti. Excel při práci s kontingenční tabulkou postupuje tak, že si data z vámi označeného listu přesune do zásobníku dat (cache) a analýzu dat pak provádí nad tímto zásobníkem dat. V případě zkopírování listu s již existující kontingenční tabulkou excel nevytváří další zásobník dat, ale vytvoří jen další pohled na tyto data. Tento postup oceníte především u rozsáhlých oblastí s daty k analýze.
- 62 -
Report sloužící k přípravě plánu nákupu Jako poslední report který si probereme bude podklad pro přípravu plánu nákupu. Zajisté budete se mnou souhlasit, že pokud vím co a kdy budu nakupovat v průběhu roku tak mám daleko lepší pozici pro vyjednávání, než když jen čekám co kdo bude chtít. Možnost dosažení množstevních slev a nebo lepší využití speciálních prodejních akcí se přímo nabízí. S informacemi které jsme schopni poskytnout nákupnímu oddělení přispíváme ke zvýšení efektivity nákupů jako takových. Právě tento druh informací je od kontrolingu očekáván a je i oceňován. Které informace budou tedy nákupčí potřebovat : • jaké zařízení bude nakoupeno • v jakém měsíci má k nákupu dojít • pro koho je nákup určen • v jaké prioritě se požadavek nachází Z těchto údajů jsme již schopni sestavit potřebnou kontingenční tabulku. Vzhledem k tomu, že máme v sešitu uloženo několik tabulek je při jakékoliv změně sumarizovaných dat relativně obtížné aktualizovat všechny kontingenční tabulky tak aby obsahovaly vždy aktuální data. Celý postup by spočíval v tom, že musíte postupně projít všemi vytvořenými kontingenčními tabulkami a z menu „Data“ provést volbu „Aktualizovat data“. Naštěstí můžeme celý proces velice jednoduše automatizovat pomocí přidáním jednoho řádku do modulu s makry. Nejvhodnější místo pro aktualizaci všech kontingenčních tabulek je při přechodu z menu se sumarizací dat do módu ručního editování tabulky. V tomto okamžiku je vhodné data aktualizovat. Makro pro „CommandButton4“ upravíme pouze o jeden řádek. Upravené makro vypadá pak následujícím způsobem. Private Sub CommandButton4_Click() ActiveWorkbook.PivotCaches(1).Refresh UserForm1.Hide End Sub Jak vidíte stačí provést aktualizaci pouze zásobníku dat a všechny kontingenční tabulky které jsou nad tímto zásobníkem postaveny se již samy automaticky zaktualizují. Tady vidíte další praktické využití předchozího tipu s kopírováním listů excelu s kontingenční tabulkou.
Závěr Na začátku minulé části jsme identifikovali hypotetický problém jedné společnosti. V závěru této kapitoly máme k dispozici pomocí relativně jednoduchého nástroje spoustu detailních informací s velice širokým použitím. Právě kreativní přístup k problémům bez předsudků nás může dovést k očekávaným výsledkům. Doufám, že pokud tento příklad v praxi přímo nepoužijete tak vás inspiroval k jiným nápadům, nebo jste alespoň pochytili nové znalosti a zkušenosti s přípravou jednoduchých aplikací v excelu.
- 63 -
Vývoj IT výkaznictví ve STAROPRAMENU – současné nově zaváděné projekty V současnosti je ve společnosti stále více prosazován styl vykazování prostřednictvím excelovských formulářů, které slouží jako podklad pro sběr dat a následné vyhodnocování pomocí grafů a kontingenčních tabulek, případně naimportování dat do informačního systému. Oproti původnímu sběru dat ručně a ručním zadáváním do počítačových systémů, je tento hromadný sběr dat novou efektivní změnou ve všech odděleních. Z toho důvodu se začaly vytvářet šablony dat a učit základní makra pro schopnost vytvoření a správu těchto automatických načítání dat. Viz. předcházející kapitoly ve kterých je popsána celá metoda tohoto nového trendu ve společnosti STAROPRAMEN …. A to včetně samostatného projektu řízení nákladů a prodeje.
- 64 -