Numere in litere VBA Microsoft Excel

2 februarie 2006


Referinta online:

R21718a - Numar scris (transformat) cu cuvinte

Locul 4, februarie 2006


Exemple:

NumarInLitere.xls


Problema

Am nevoie sa-mi fac in Exel niste calcule si unele rezultate (numere) imi trebuiesc redate cu text, adica cam in felul urmator:

50,00 Cincizeci lei 00 bani.

Cum se face chestia aceasta in Exel?

- Valeriu


Raspunsul meu

Am scris o functie VBA care rezolva destul de bine problema.

Asa cum se vede din exemplu, cel mai mare numar tradus corect este 999,99.

Codul este dat mai jos:


Function NumarInLitere(r As Range) As String
Rem Copyright Mihai Maerean
Rem http://maerean.3x.ro
    Dim intreg
    intreg = Int(r.Value)
    
    Dim cifre As Variant
    Dim cifrefeminin As Variant
    Dim zecedouazeci As Variant
    cifre = Array("zero", "un", "doi", "trei", "patru", "cinci", "sase", "sapte", "opt", "noua")
    cifrefeminin = Array("zero", "o", "doua", "trei", "patru", "cinci", "sase", "sapte", "opt", "noua")
    zecedouazeci = Array("zece", "unsprezece", "doisprezece", "treisprezece", "paisprezece" _
        , "cincisprezece", "saisprezece", "saptesprezece", "optsprezece", "nouasprezece")
    
    Dim rezultat As String
    rezultat = "zero"
    
    If (intreg >= 100) Then
        Dim sute As Integer
        sute = Int(intreg / 100)
        If (sute <> 1) Then
            rezultat = cifrefeminin(sute Mod 10) & " sute"
        Else
            rezultat = "o suta"
        End If
        intreg = intreg Mod 100
    Else
        rezultat = ""
    End If
    
    If (intreg >= 10 And intreg <= 19) Then
        rezultat = rezultat & " " & zecedouazeci(intreg - 10)
    Else
    
        If (intreg >= 10) Then
            Dim zeci As Integer
            zeci = Int(intreg / 10)
            rezultat = rezultat & " " & cifrefeminin(zeci Mod 10) & "zeci"
            If (intreg Mod 10 > 0) Then
                rezultat = rezultat & " si"
            End If
            intreg = intreg Mod 10
        End If
        
        If (intreg > 0) Then
            rezultat = rezultat & " " & cifre(intreg Mod 10)
        End If
        
    End If
    
    If (r.Value < 1) Then
        rezultat = "zero"
    End If
    
    NumarInLitere = Trim(rezultat) & " RON si " & Int(100 * (r.Value - Int(r.Value))) & " bani"
End Function