Skončíme seriál o makrech v Excelu posledním dílem o filtrech. Minule jsme se podívali do zákulisí Excelu, a to na kolekci Areas – Oblasti. Dnes si zkusíme napsat velmi užitečnou rutinu ke zjišťování prvního řádku vyfiltrované oblasti dat, kterou si můžete přidat do většiny svých budoucích programů.
Podkladová úloha: Pracujeme již posedmé se stejnou rozsáhlejší tabulkou. Stáhněte si sešit 2011-26 Filtry.xlsm z odkazu na konci článku. Sešit otevřete. Uvidíte zhruba toto:
V předchozím díle jsme překonali chybu Excelu při kopírování pomocí PasteSpecial z kolekce Areas. Dostali jsme se k číslu prvního řádku. Číslo posledního řádku umíme najít celkem spolehlivě i nahmatáním od spodu, např.
Range("A65536").End(xlUp).Row
S prvním vyfiltrovaným řádkem jsme vyzkoušeli metodu přes Areas. Ta je samozřejmě závislá na tom, že v datové oblasti nemáme kromě filtrů skryté řádky a sloupce. Ty totiž nepředvídatelně namnoží počet Areas, a metoda, kterou si dnes předvedeme, nebude fungovat správně. Pro většinu aplikací to však bude fungovat, a až budete potřebovat zvládnout filtrovanou oblast, v níž jsou navíc skryté řádky a sloupce, už budete natolik zkušení, že to elegantně vyřešíte.
Dnes tedy sestrojíme obecnou rutinu, kterou bychom si mohli přidávat v podstatě ke všem projektům. První rozhodnutí bude, jak ji pojmenujeme, druhé, zda to bude subrutina nebo funkce. Při pojmenovávání něčeho, co chcete používat v mnoha projektech, je třeba dobře zvažovat, co je a co není vhodné.
Například kdybyste rutinu pojmenovali „R1f“ (ve smyslu Řádek 1 z Filtru), mohlo by to fungovat, a vy byste si časem zvykli na výrazy typu
Call R1f
nebo
Vysledek = R1f
Přesto vám takové pojmenování nedoporučuji, protože pro kohokoli z vašich kolegů to bude záhada. A abyste ji osvětlili, budete muset k takovým výrazům přidávat komentáře typu „‘Nalezení prvního řádku vyfiltrovaných dat“, což vám zase sebere radost z úsporného názvu.
Lze zvolit i opačný extrém, a volat například:
Vysledek=Prvni_Radek_Dat_Po_Filtrovani
Tady sice ušetříte komentáře, zato se vystavujete zdlouhavosti a překlepům, které vám polezou na nervy.
Třetí možnost je oblíbená zlatá střední cesta – vypovídací hodnota a přitom stručnost. V závislosti na tom, co naše rutina bude dělat, ji můžeme pojmenovat např. „Najdi_Vyfiltrovanou“, nebo „Radek_Filtrovaných“.
Musíme se rovněž rozhodnout, co má opravdu dělat. Pokud chceme, aby rovnou poskytla číslo řádku první vyfiltrované věty, bude třeba se vyrovnat s faktem, že někdy se nevyfiltruje nic. Vrátíme pak třeba nulu? Nebo vrátíme číslo hlavičkového řádku?
Myslete dopředu! Jakmile sestrojíte funkci, která ve většině případů vrátí rovnou správné číslo řádku,…