Konwersja kwot amerykańskich na polskie

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 myśli w temacie “Konwersja kwot amerykańskich na polskie

  1. 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]

    • 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]

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *