Vzorce alebo vlastné funkcie vo VBA?

MS Excel má výhody aj v tom, že môžete jednu vec urobiť viac spôsobmi. Možností je niekoľko: postupné vzorce, jeden maxi vzorec alebo vlastná funkcia vo VBA. Popíšem Vám to na konkrétnom príklade zmeny rodného čísla na dátum narodenia.

Písmo: A- | A+
Diskusia  (13)

Z takéhoto RČ 731112/1234 potrebujete dostať dátum 12.11.1973. Budete potrebovať použiť niekoľko vstavaných funkcii (textové, logické), aby ste dosiahli výsledok. Prvá možnosť je postupnosť niekoľkých vzorcov. To znamená, že budete do buniek vedľa seba vpisovať vzorce, ktoré budú postupne oddeľovať jednotlivé časti rodného čísla a potom ich budú spájať v požadovanom poradí. Mohlo by to byť takto (ale aj inak, nikde nie je povedané, že toto je jediný spôsob):

=ČÁST(A1;1;2) oddelí rok z rč
=ČÁST(A1;3;2) oddelí mesiac z rč
=ČÁST(A1;5;2) oddelí deň z rč
=HODNOTA(B1+1900) zmení rok na číslo a pripočíta hodnotu 1900
=HODNOTA(C1) zmení mesiac na číslo
=HODNOTA(D1) zmení deň na číslo
=KDYŽ(F1>50;F1-50;F1) upraví mesiac podľa toho či je to ženské alebo mužské priezvisko. Ženy majú mesiace označené od 51 do 62.
=CONCATENATE(G1;".";H1;".";E1) spojí oddelené časti rodného čísla a oddelí ich bodkou
=DATUMHODN(I1) spojené časti zmení na dátumový formát.

SkryťVypnúť reklamu
SkryťVypnúť reklamu
SkryťVypnúť reklamu
Článok pokračuje pod video reklamou
SkryťVypnúť reklamu
Článok pokračuje pod video reklamou

Tieto konkrétne vzorce Vám budú fungovať, ak RČ napíšete do bunky A1 a ostatné postupne vpíšete do vedľajších buniek B1 až J1. Konečný výsledok bude v J1. Názvy funkcii sú pre Cz verziu Excelu.

Druhá možnosť je vytvorenie „maxi vzorca“, ktorý sa vpíše do jednej bunky, ale obsahuje všetky vyššie uvedené funkcie. Môže to vyzerať takto:
=DATUMHODN(CONCATENATE(HODNOTA(ČÁST(A1;5;2));".";KDYŽ(HODNOTA(ČÁST(A1;3;2))>50;HODNOTA(ČÁST(A1;3;2))-50;HODNOTA(ČÁST(A1;3;2)));".";HODNOTA(ČÁST(A1;1;2)+1900))) Tretia možnosť je vytvorenie vlastnej funkcie vo VBA. Toto už vyžaduje aspoň základy programovacieho jazyka VBA. Berte to iba ako ukážku jedného riešenia problému. V editore jazyka VBA (otvoríte ho z Excelu: Alt + F11) treba vytvoriť nový modul cez ponuku InsertModule. Do tohto modulu treba cez InsertProcedure... vložiť funkciu, ktorá sa bude potom zobrazovať v ponuke funkcii Excelu.

SkryťVypnúť reklamu
Vlastná funkcia v okne funkcii Excelu
Vlastná funkcia v okne funkcii Excelu 


Táto funkcia by mala obsahovať nasledujúci kód (mohol by ešte obsahovať deklaráciu premenných a tiež nikde nie je povedané, že toto je jediný spôsob aký existuje, programátori by to možno riešili iným spôsobom):

Function rodne_cislo(bunka) As Date
rok = Mid(bunka, 1, 2)
mesiac = Mid(bunka, 3, 2)
den = Mid(bunka, 5, 2)
cely_rok = rok + 1900
mesiac2 = IIf(mesiac > 50, mesiac - 50, mesiac)
Spojenie = den & "." & mesiac2 & "." & cely_rok
datum = DateValue(Spojenie)
rodne_cislo = datum
End Function

Takto vytvorená funkcia sa napíše do bunky v tomto tvare =rodne_cislo(A1) a zobrazí výsledok ako neformátované číslo (z RČ 731112/1234 zobrazí 26980). Aby ste z toho mali dátum 12.11.1973, treba zmeniť formát bunky na dátum.

SkryťVypnúť reklamu

V tomto článku som Vám chcel ukázať, že existujú rôzne spôsoby na získanie jedného výsledku. Je na Vás ktorý použijete. Ešte musím spomenúť, že rýchlosť prepočítania a konečná veľkosť súboru vo všetkých troch možnostiach je iná (pri veľkom počte hodnôt). V literatúre sa popisuje, že vlastná VBA funkcia je najpomalší spôsob oproti „maxi vzorcom“ a postupným vzorcom, ktoré výrazne zväčšujú veľkosť súboru.

Peter Belko

Peter Belko

Bloger 
  • Počet článkov:  345
  •  | 
  • Páči sa:  15x

Môžete ho stretnúť ako lektora na počítačových školeniach, pri IT konzultáciách vo firmách, na letných terasách a v kaviarňach ako pozoruje dianie okolo seba, ale aj na potulkách po gréckych ostrovoch, pretože počítače nie sú jediné čo ho zaujíma.Ostrovné správy popisuje na osobnej stránke www.dovolenkar.skAktívne prispieva na svoj portál Tipy a triky v MS Office.. Zoznam autorových rubrík:  Tipy a triky MS Office 2013/20Externé tipy a triky MS OfficeSharePoint, spolupráca,Office3Tipy a trikyNávodyStalo sa ...Office 2010/2013 BetaMicrosoft KB článkySúkromnéNezaradené

Prémioví blogeri

Martina Hilbertová

Martina Hilbertová

50 článkov
Milota Sidorová

Milota Sidorová

5 článkov
Adam Valček

Adam Valček

14 článkov
Zmudri.sk

Zmudri.sk

3 články
Roman Kebísek

Roman Kebísek

106 článkov
Věra Tepličková

Věra Tepličková

1,072 článkov
reklama
reklama
SkryťZatvoriť reklamu