MS Excel VBA -> tizedespontból tizedesvessző

Sziasztok!

Következőben szeretnék segítséget kérni:
MS excellel húzunk be egy adatbázisból adatokat, mely lekérdezéskor a számokban a tizedes ponttal jelölődnek és szövegként értelmezi az Excel. Vannak egészek, egynél kisebb és nagyobb tört számok.
A cél, hogy a pontból vessző, a szövegből szám legyen és az Excel így is értelmezze. A gond, úgy tűnik, hogy a makró különböző locale beállításokat használ mint a grafikus felület és nem találom a kettő között az átjárót. (Ebbe belefutottam már korábban CSV export kapcsán is)

Adat példa:

DATA
0
0.027
2.579401635510707
-1

Se a find and replace, se replace nem működik az 1-nél nagyobb számoknál, mert az átalakításnál a ","-t ezres jelölőnek veszi, így pl a fenti 2.579401635510707 számból 2 579 401 635 510 707 lesz.

Amit próbáltam:
- először eléfűzni egy betűt, hogy mindenképp stringként értelmezze, utána replace, majd a betű levágása, szintúgy a fenti eredményt hozza.
- Application.UseSystemSeparators / Application.ThousandsSeparator / Application.DecimalSeparator változók állítgatása
- agybaj

28. nem működő verzió:

Range(data_cell).Value = "t" + Left(CStr(Range(data_cell).Value), 5)
Range(data_cell).Select
Selection = Replace(Range(data_cell).Value, ".", ",")
ActiveCell.Value = Mid(ActiveCell.Value, 2, Len(ActiveCell.Value) - 1)

Remélem van köztetek Excel guru :)

Hozzászólások

Azt esetleg probaltad ,hogy magaban az excelben beallitod mit szeretnel hasznalni?

Options ---> Advanced -----> Use system separators uncheck

Decimal separator beallit

Thousands separator beallit

Hogyan kerülnek be az adatbázisból az adatok az Excelbe most?

Üdv,
Marci

Nyilván függ attól, hogy milyen Excel verziót használsz.
Nálam (16.0.11126.20234) így megy:
-Adatok/Adatok beolvasása/Más forrásból/ODBC adatbázisból
-itt konfigurálod az ODBC kapcsolatot, megjelenik a Power Query editor
-A kérdéses oszlop tetején a típust szövegesre állítod
-cseréled a "."-ot ","-re
-A típust tizedestörtre állítod
-kész.

Ugyanez Power Query-ül:

let
    Forrás = /* ez itt az ODBC kapcsolat */,
    #"Típus módosítva" = Table.TransformColumnTypes(Forrás,{{"DATA", type text}}),
    #"Érték felülírva" = Table.ReplaceValue(#"Típus módosítva",".",",",Replacer.ReplaceText,{"DATA"}),
    #"Típus módosítva1" = Table.TransformColumnTypes(#"Érték felülírva",{{"DATA", type number}})
in
    #"Típus módosítva1"

Üdv,
Marci

Nem vagyok guru, de simán csak a CStr függvény használata nem elég?

Szia!

Végül ez vezetett a megoldáshoz:
Először szöveggé kell alakítani, majd azt visszaolvasva (a VBA értelmezése miatt a . lesz a tizedesvessző, így az érték jól tárolódik) számmá konvertálható majd visszaírva már az Excel beállított tizedes elválasztóját használja:

Range(data_cell).Value = CStr(Range(data_cell).Value)
Range(data_cell).Value = Round(CDbl(Range(data_cell).Value), 3)