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:
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)
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.
Žiadne komentáre:
Zverejnenie komentára
Poznámka: Komentár môže zverejniť iba člen tohto blogu.