dnes je 27.7.2024

Input:

Excel 2007: Makra – VBA – Filtry – 7. část

22.12.2011, , Zdroj: Verlag Dashöfer

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,

Nahrávám...
Nahrávám...