Akademia VBA

czyli jak uzyskać władzę nad światem … danych

Konwersja kwot amerykańskich na polskie

Kategorie: Access VBA — Dariusz Kolasa o 19:46, 5 Paź 2011

Bardzo często przy imporcie czy linkowaniu plików txt w Accessie mamy problem z niepolskimi separatorami w kwotach np 1,000.00. Z niewiadomych przyczyn Excel ma narzędzie do prawidłowego rozpoznawania separatora tysięcy a Access nie. Stąd w Accessie musimy w specyfikacji importu/łącza ustawić taką kolumnę jako tekstową a następnie przerobić w niej separatory np przy pomocy poniższej funkcji (powinna być wgrana do modułu publicznego aby można jej używać w dowolnej kwerendzie):

Function KwotaUSA2PL(KwotaUSA As String) As Currency
    Dim NrZnaku As Long
    Dim Znak As String
    Dim t As String
    Dim txtKwota As String
    t = Trim(KwotaUSA)
    For NrZnaku = 1 To Len(t)
        Znak = Mid(t, NrZnaku, 1)
        If Znak = "." Then
            txtKwota = txtKwota & ","
        Else
            If Znak <> "," Then
                txtKwota = txtKwota & Znak
            End If
        End If
    Next
    KwotaUSA2PL = CCur(txtKwota)
End Function

W komentarzach pojawiła się ciekawa dyskusja, jak tą funkcję zastąpić wyrażeniem z użyciem funkcji Replace

2 komentarze »

Komentarz- Michał

27 maja 2014 @ 11:12

Witam,
czy nie jest prościej zastosować funkcję Replace?
Zamiast pętli For i jednego warunku If otrzymujemy jedną linię tekstu.
[cc lang=”vb”]
t = CCur(Trim(Replace(t, „.”, „,”)))
[/cc]

Komentarz- Darek Kolasa

27 maja 2014 @ 21:16

niestety nie, ponieważ to wyrażenie nie usuwa przecinków, które są separatorami tysięcy w kwotach USA
Czyli kwotę „1,200.50” zamieni na „1,200,50” co dalej jest nieprawidłowe
Ale idąc dalej tym tropem można zagnieździć Replace w Replace i faktycznie mamy wtedy 1 linię kodu, lub wyrażenie do zastosowania w kwerendzie:
[cc lang=”vb”]
CCur(Replace(Replace(Trim(t), „,”, „”),”.”,”,”))
[/cc]

RSS komentarzy do wpisu. Adres trackback

Zostaw komentarz

Dozwolone znaczniki XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>