Banner

utorok 1. apríla 2014

Ako zmeniť “.” za “,” v čísle tak, aby sme zachovali čo najpresnejšie desatinné čísla

 

Prejdeme priamo k problému. Máte situáciu, keď sa Vám z databázy alebo iného zdroja dostanú čísla v nasledujúcej forme:

image

Pokiaľ nedisponujete EN verziou Excelu a potrebujete zachovať čo najlepšiu presnosť, tak môžete mať seriózny problém. Dôvod? Pri použití možnosti Find / Replace sa dostanete do situácie, keď si náš milovaný Excel zmyslí, že číslo zaokrúhli ( prvý prípad na 10,6), pritom je jedno či to použijete manuálne alebo v rámci VBA procedúry. V prípade, že chcete použiť iba funkcie, stačí vedľa napísať kombináciu funkcií:

=IFERROR(REPLACE(A2;FIND(“.”;A2;1);1;”,”);A2)

 image

Avšak ak si na obrázku všimnete stĺpec C, v ktorom delíme hodnotu zo stĺpca B číslom jeden, Excel si pamätá 13 desatinných miest. V rámci niekoľkohodinového špekulovania na internete som nenašiel spôsob, akým by sa mohli nastaviť takéto možnosti. Každopádne, ak máte podobný problém a potrebujete na to použiť makro v rámci procedúry – skúste si nasledujúce riešenie:

Sub Makro()

Application.ScreenUpdating = False
Dim i
Dim UB
Dim temp

UB = Cells(Rows.Count, 1).End(xlUp).Row

 
    Cells(2, 3).FormulaR1C1 = _
    "=IF(IFERROR(FIND(""."",RC[-2]),0)=0,RC[-2]/1,ROUND(LEFT(RC[-2],FIND(""."",RC[-2])-1)&"",""&MID(RC[-2],FIND(""."",RC[-2])+1,LEN(RC[-2])-FIND(""."",RC[-2]))/1,LEN(MID(RC[-2],FIND(""."",RC[-2])+1,LEN(RC[-2])-FIND(""."",RC[-2])))))"
    Cells(2, 3).Select
    Selection.Copy
    Selection.AutoFill _
    Destination:=Range(Cells(2, 3), Cells(UB, 3))
    Range(Cells(2, 3), Cells(UB, 3)).Copy
   
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False

 
Application.ScreenUpdating = True
End Sub

Ukážkový súbor je k dispozícii kliknutím na obrázok Download, v prípade dotazov som k dispozícii na FB.

                    downloads_normalEK logo FB

Žiadne komentáre:

Zverejnenie komentára

Poznámka: Komentár môže zverejniť iba člen tohto blogu.