Banner

štvrtok 30. mája 2013

Ako sa zbaviť diakritiky v slove – funkcia =CistyText()

 

Ako ste si už všimli, sága vlastných funkcií a makier pokračuje. Dnes som sa zamyslel nad otázkou, ako nám môžu slová s diakritikou skomplikovať život.

Určite ste aspoň raz museli ručne kontrolovať názvy firiem, ktoré kedysi zadali účtovníčky ručne do systému a zrazu, keď finalizujete report, tak sa vám v kontingenčnej tabuľke zbytočne zobrazí napríklad: Peter Tabiš s.r.o. a Peter Tabis s.r.o.

Tým pádom vám “totály” nesedia a máte v tom bordel. To všetko len preto, lebo náš Slovenský spolu s Českým jazykom obsahujú písmenka typu é, í, á atď.

Ja som si pripravil zoznam znakov, ktoré sa najviac vyskytujú:

image

Tieto znaky som spojil a použil v nasledujúcom skripte:

Function CistyText(SpinavyText As String)
'funkcia, ktorá vyčistí text od diakritiky

Dim Stare As String
Dim Nove As String
Dim i As Integer

'nadefinované konštanty, v ktorých sú spojené znaky s diakritikou a bez nej
Const SpinavePismenka = "áćĆĎéÉíĹĺńŃóÓŕśŔŚťúÚýźŹÁčČďěĚÍĽľňŇôÔřšŘŠŤůŮÝžŽ"
Const CistePismenka = "acCDeEiLlnNoOrsRStuUyzZAcCdeEiLlnNoOrsRSTuUYzZ"

'pre každý znak z SpinavePismenka nájde alternatívny z CistePismenka a ak sa nachádza v SpinavyText tak ho nahradí
For i = 1 To Len(SpinavePismenka)
Stare = Mid(SpinavePismenka, i, 1)
Nove = Mid(CistePismenka, i, 1)
SpinavyText = Replace(SpinavyText, Stare, Nove)
Next

'Vráti očistený text
CistyText = SpinavyText

End Function

Výsledok v praxi vyzerá nasledovne:

image

Takto vyčistený text si môžete upraviť buď na všetky malé alebo veľké písmená. Tým pádom by sa mala eliminovať akákoľvek manuálne vytvorená chyba a reporty by mali fungovať ako hodinky Úsmev

Sledujte Ďalšie VBA vychytávky a nezabudnite na FB skupinu Úsmev

pondelok 27. mája 2013

Funkcia - Nájdi poslednú neprázdnu bunku v riadku (LROW)


Určite sa Vám stalo, že ste potrebovali napísař sumu alebo nadefinovať oblasť pre kontingenčnú tabuľku tak, aby ste tam po manipulácii mali kompletné data, avšak bez zbytočných prázdnych riadkov.

Takáto povedzme suma neesixtuje. Avšak čo by si človek pomocou VBA nevymyslel :). 

Dnes vám ukážem ako si jednoducho nadefinovať funkciu, ktorá nájde hodnotu posledného neprázdneho riadku v stĺpci. Kód vyzerá nasledovne:

Function LROW(Column As Integer) As Integer

'Vstupná premenná Column je typu integer, t.z. musíte zadať číslo stĺpca, napr. A ako 1, B ako 2 atď.
LROW = Cells(Rows.Count, Column).End(xlUp).Row
'Výstupná premenná LROW je typu integer, takže dostaneme číslo riadku.

End Function

Výsledok si môžete skúsiť naplnením zopár buniek v prvom stĺpci A hodnotami (ja som vyplnil 44). Potom zadajte do funkcie hodnotu 1 a vráti vám počet neprázdných buniek (viď obrázok).


Takúto funkciu môžeme aplikovať na sumu takto:


Takto vytvorená suma berie vždy v úvahu nové, dodatočne vyplnené (vymazané) bunky bez toho, aby ste odkaz museli ručne upravovať.



štvrtok 2. mája 2013

Ako nevhodný formát dokáže znepríjemniť život (inšpirované dotazom čitateľa)

 

Zažili ste niekedy ten pocit beznádeje, keď sa snažíte použiť vzorec (match, vlookup), no skončíte bez výsledku?

Jedným z možných problémov môže byť formát hodnôt v stĺpcoch. Stiahnite si template a môžeme začať.

Ako vidíte, máme k dispozícii dva stĺpce. Skúsme vyhľadať pozíciu hodnoty zo stĺpca A v stĺpci B, viď nasledujúci obrázok. 

image

Ak skopírujete vzorec pre všetky hodnoty v prvom stĺpci, dostanete nasledujúci výsledok:

image

V praxi sa takéto niečo stáva pomerne často (pri výstupoch z databázových systémov sa stane, že hodnoty Excel nemusí zobraziť ako čísla).

Skopírujte a vložte hodnoty do toho istého stĺpca. Objaví sa Vám výstražný kosoštvorec, viď obrázok.

image

Po rozkliknutí zvoľte možnosť Convert to Number a po niekoľkých sekundách (záleží od toho, koľko buniek musí Excel opraviť) Vám funkcia vráti správne hodnoty (nasledujúci obrázok).

image