Přeskočit navigaci | Přeskočit na novinky
     

Jste zde: Úvodní stránka » excel » vba-funkce-vzorce » UDF-vlastni-funkce-excel-VBA
Microsoft Excel logo

UDF - vlastní funkce VBA Excel

Videokurzy Excel

Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:

Jak na pokročilejší vlastní funkce ve VBA.

Úvodem

Předpokládám, že základy tvorby funkcí využitím VBA máte za sebou případně základy pro připomenutí. V tomto článku se zaměřím, jak pracovat ve funkcích s odkazy na buňky dynamicky. Nebol-li jak zjistit řádek a sloupec aktuální buňky ve které je funkce, případně se podívat o řádek výšek. Jak zjistit řádek, sloupec buňky, která bude v argumentu, atd.

Pro přehlednost a možnost článek rozšířovat a doplňovat je tento text rozdělen na kapitoly


Řádek sloupec - odkaz z argumentu

Potřebuji zjistit ve vlastní funkci (UDF - uživatelsky definovyná funkce využitím VBA) na jaký řádek a na jaký sloupec se odkazuje. Tím pádem mohu zahrnout do výpočtu (například se následně mohu odkázat na hodnotu o x řádku víše/níže hodnotu). To stejné může platit pro sloupce.

To že musí být v Module nepřipomínám to určitě víte.

Function UDF_Radek(Bunka As Range) As Long ' zajíma mě řádek na který se odkazuji Dim radek As Long ' radek kam se odkazuje radek = Bunka.Row UDF_Radek = radek End Function

Vhodné je nezapomenout na Volatile, aby došlo k automatickému přepočtu funkce, když se přidá/ubere řádek.

Application.Volatile

Výsledek UDF s Volatile bude (je jasné, že názvy funkcí musí být unikátní)

Function UDF_Radek(Bunka As Range) As Long Application.Volatile ' zajíma mě řádek na který se odkazuji Dim radek As Long ' radek kam se odkazuje radek = Bunka.Row UDF_Radek = radek End Function

Funkci pak zapíši klasicky, vrátí jen řádek na kterém se bunka I10 nachází, neboli číslo 10.

=UDF_Radek(I10)

Můžete vyzkoušet, jak se chová s/bez Volatile. Přidejte/odeberte řádek případně sloupec pro další příklad.

Function UDF_Sloupec(Bunka As Range) As Long ' Application.Volatile Dim sloupec As Long ' sloupec kam se odkazuje sloupec = Bunka.Column UDF_Sloupec = sloupec End Function

Funkci pak zapíši klasicky do bunky, vrátí se číslo sloupce.

=UDF_Sloupec(A1)

Poznámka

Vím, že v listu existují funkce ŘÁDEK(), SLOUPEC(), POLÍČKO..., ale potřeboval jsem jednoduchou ukázku, která funguje napoprvé. Díky Petře za tip na doplnění a vylepšení.


Hodnota/Value - odkaz z argumentu

Mám sloupec a řádek, ale potřebuji zjistit hodnotu v buňce.

Function UDF_Hodnota(Bunka As Range) As Variant UDF_Hodnota = Bunka.Value End Function

Nemusím se dívat jen na vlastnost Value, ale také Text, atd.

Function UDF_HodnotaB(Bunka As Range) As Variant Application.Volatile UDF_HodnotaB = Bunka.Text End Function

Nebo se podívat do jiné buňky

Function UDF_Hodnota3(Bunka As Range) As Variant Application.Volatile UDF_Hodnota2 = Cells(2, 1).Value End Function

Jak zapsat tuto funkci do buňky již nechám na vás.


Výpočty/podmínky - odkaz z argumentu

Na základě hodnoty v buňce se potřebuji rozhodnout a vypsat vetší než nula nebo menší a rovno nula.

Function UDF_Stav(Bunka As Range) Application.Volatile If Bunka.Value > 0 Then UDF_Stav = "Větší než 0" Else UDF_Stav = "Menší rovno 0" End If End Function

Další ukázky v přípravě. Funkce bude fungovat i když není uveden typ který vrací As Variant.


Řádek sloupec - aktivní buňka

Potřebuji vědět, na kterém řádku sloupci se nachází buňka se vzorcem, například chci načítat hodnotu, která je o buňku víše, vpravo, vlevo, dole, než je právě vybraná buňka (ve které se nachází onen vzorec).

Pro řádek

Function UDF_AktivRadek() As Long 'Application.Volatile ' otestujte s a bez UDF_AktivRadek = Application.Caller.Row End Function

Pro sloupec

Function UDF_AktivSloupec() As Long 'Application.Volatile UDF_AktivSloupec = Application.Caller.Column End Function

Opět můžete využít se zápisem Application.Volatile nebo bez a co se provede přidáváním/odebíráním řádků/sloupců.


Adresa - aktivní buňka

Může se vám hodit i adresa aktivní buňky (nebudete muset skládat z řádků a sloupce):

Function UDF_AktivAdresa() As Variant 'Application.Volatile UDF_AktivAdresa = Application.Caller.Address End Function

V přípravě

Další tipy a triky. Pokud vás napadá téma, můžete zmínit v komentářích, třeba se přednostně zaměřím.


Článek byl aktualizován: 14.09.2018 22:43

Odměna

Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.


Pavel Lasák - autor webu

Pavel Lasák

Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.

   Pavel Lasák LinkedIn Profil    Pavel Lasák Google+ Profil    Pavel Lasák facebook Profil    Pavel Lasák twitter Profil


Komentáře zatím nejsou

Můžete být prvními co zanechají smysluplný komentář.







Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


TOPlist Licence Creative Commons webarchiv rss XML

Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2018 | 201

Tento web zatím neprošel jazykovou korekturou. Beta verze redakčního systému.