Transforma numere in text – Excel VBA download


Radu, cum as putea sa transform un numar in text in Excel? De exemplu, daca scriu 123 intr-o celula sa mi-o trasnforme in “o suta doua zeci si trei”.

Hai sa vedem, pornesc acum betoniera de Excel-uri. 🙂

transforma numere in text

Functii, macro, UDF

Sunt mai multe moduri in care poti face asta. Poti sa incerci prin functii, macro-uri sau UDF. Eu am mers pe UDF.

Ce e UDF?

UDF vine de la User Defined Functions. Cred ca ai auzit pana acum de SUM, IF, VLOOKUP, etc. Ei bine, pe langa functiile astea predefinite, ti le poti defini si pe ale tale.



Nu de alta, dar nu stiu sa fie vreo functie in Excel numita “HAIACUMTRANSFORMANUMEREINTEXT(text). Eu cel putin nu am gasit-o. 🙂

Download

Poate ca si tu te temi de cod-ul VBA pe care o sa il pun mai jos. De asta, am zis ca ar fi mai bine sa iti dau fisierul care deja contine cod-ul care face “magia”.

Transforma numar in text – download.

E un link de pe Google Drive – site-ul vad ca nu ma lasa sa incarc fisiere xlsm – contin mini-bombe. 🙂

Dupa ce descarci fisierul, nu uita sa dai enable la macro-uri ca sa te pot virusa cu succes poti rula functia.

Tema de la curs online

Fisierul asta e de fapt ultima tema de la Macro / VBA – urmatorul nivel in Excel, cursul meu online. Daca vrei sa si intelegi cum am gandit codul, as zice sa arunci o privire peste curs.

Hai sa vedem cod

Si daca nu vrei sa descarci fisierul si preferi sa vezi doar codul ca sa imi spui ce nu am facut bine, il poti gasi mai jos. Cred ca mai gasesti si o bata in sectiunea de comentarii. 🙂

CONV e functia pe care o apelezi, CIFRA e o functie auxiliara pe care am folosit-o ca sa mai scurtez din cod.


Function CONV(Numar As String)

L = Len(Numar) ‘vedem lungimea numarului
CONV = “” ‘pentru situatia cand scrie nu avem nimic in celula

If L = 1 Then ‘o singura cifra
CONV = CIFRA(Numar)
End If

If L = 2 And Left(Numar, 1) = 0 Then ‘pentru numere intre 101 si 109
CONV = CIFRA(Right(Numar, 1))
End If

If L = 2 And Left(Numar, 1) = “1” Then ‘numerele intre 10 si 19
If Numar = “10” Then
CONV = “zece”
ElseIf Numar = “11” Then: CONV = “unsprezece”
ElseIf Numar = “12” Then: CONV = “doisprezece”
ElseIf Numar = “13” Then: CONV = “treisprezece”
ElseIf Numar = “14” Then: CONV = “patrusprezece”
ElseIf Numar = “15” Then: CONV = “cincisprezece”
ElseIf Numar = “16” Then: CONV = “saisprezece”
ElseIf Numar = “17” Then: CONV = “saptesprezece”
ElseIf Numar = “18” Then: CONV = “optusprezece”
ElseIf Numar = “19” Then: CONV = “nouasprezece”
End If
End If

If L = 2 And Left(Numar, 1) = “2” Then ‘numere intre 20 si 29
CONV = “doua zeci si ” & CIFRA(Right(Numar, 1))
End If

If L = 2 And Left(Numar, 1) > 2 Then ‘numere intre 30 si 99
If Right(Numar, 1) <> “0” Then
CONV = CIFRA(Left(Numar, 1)) & ” zeci si ” & CIFRA(Right(Numar, 1))
Else
CONV = CIFRA(Left(Numar, 1)) & ” zeci”
End If
End If

If L = 3 And Left(Numar, 1) = “1” Then ‘numere intre 100 si 199
CONV = “o suta ” & CONV(Right(Numar, 2))
End If

If L = 3 And Left(Numar, 1) = “2” Then ‘numere intre 200 si 299
CONV = “doua sute ” & CONV(Right(Numar, 2))
End If

If L = 3 And Left(Numar, 1) > 2 Then ‘numere intre 300 si 399
CONV = CIFRA(Left(Numar, 1)) & ” sute ” & CONV(Right(Numar, 2))
End If

End Function

Function CIFRA(Numar As String)
If Numar = “1” Then
CIFRA = “unu”
ElseIf Numar = “2” Then: CIFRA = “doi”
ElseIf Numar = “3” Then: CIFRA = “trei”
ElseIf Numar = “4” Then: CIFRA = “patru”
ElseIf Numar = “5” Then: CIFRA = “cinci”
ElseIf Numar = “6” Then: CIFRA = “sase”
ElseIf Numar = “7” Then: CIFRA = “sapte”
ElseIf Numar = “8” Then: CIFRA = “opt”
ElseIf Numar = “9” Then: CIFRA = “noua”
End If
End Function


Daca ai incercat sa copiezi codul si nu merge, iti recomand sa descarci fisierul care are deja codul inclus. Daca ai alte “regional settings” fata de mine pot aparea probleme.