Táto úloha ma inšpirovala z dôvodu, že pracovníci vo firmách riešia import dát z informačných systémov, kde v číslach namiesto desatinných čiarok dostanú desatinné bodky. Cieľom je rýchlym a elegantným riešením prekonvertovať tieto „čísla“ na reálne čísla. Bežne môžeme použiť nahradenie textu (Karta Home > Find&Select > Replace), ale v niektorých prípadoch môže dôjsť k výraznej zmene čísla pri jeho čísla (napr. číslo s desatinnými miestami zmení na celé).
Práve pre tento prípad som pripravil nasledujúce makro.
Súbor s riešením je samozrejme k dispozícii na stiahnutie kliknutím sem. Funguje to tak, že po otvorení je potrebné vyznačiť údaje, ktoré obsahujú desatinné bodky, potom makro s názvom NahradDesatinneBodkyZaCiarky spustíme klávesovou skratkou CTRL + SHIFT + N alebo napr. prostredníctvom karty View kde úplne napravo nájdeme Macros > View Macros, príp. klávesovou skratkou ALT + F8. Prostredníctvom príkazu View Macros nám Excel zobrazí nasledovné okno, kde makro NahradDesatinneBodkyZaCiarky spustíme prostredníctvom Run.
Pozor, ak Vám makro v Exceli nejde spustiť, skúste si všimnúť, či ich máte povolené, čo Excel informuje notifikačným panelom v hornej časti, vyzerá to nasledovne:
Je potrebné zvoliť Enable Content 🙂
Pre tých, ktorí sa učia programovať v Microsoft Excel VBA uvádzam zdrojový kód spolu s poznámkami, ktorý som použil:
Sub NahradDesatinneBodkyZaCiarky() ' NahradBodkyZaCiarky Macro ' ' Deklaracia premennych cell a commaPosition Dim cell As Range Dim commaPosition As Integer For Each cell In Selection ' Najprv zistime ci bunka obsahuje desatinnu bodku commaPosition = InStr(cell.Value, ".") ' Ak ano, tak este zistujeme ci aktualna bunka je prazdna, ak nie, potom ... If commaPosition > 0 And Not IsEmpty(cell) Then ' ... nahradime desatinne bodky za ciarky a pripocitame 0, aby sme prekonvertovali text na cislo cell.Value = Replace(cell.Value, ".", ",") + 0 End If Next cell End Sub
Ak by ste mali otázky alebo pripomienky k tomuto makru, píšte prosím do komentárov alebo chatu, príp. ak máte záujem o školenie Excel VBA, neváhajte ma prosím kontaktovať.