Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Convertir de Numeros A Letras
Convertir de Numeros A Letras
'**
**'
'** CONVERTIR DE NUMEROS A LETRAS
**'
'**
**'
'** licencia: USO LIBRE
**'
'**
**'
'**
**'
'**
**'
'**********************************************************************
Public Function CLetras(ByVal numero As Double, Optional fmtoUnidad As
Integer = 0, Optional Unidades As String = "Kilos", Optional Unidad As
String = "Kilo", Optional Genero As String = "M") As String
Dim strUnidad(0 To 5) As String
Dim strUnidades(0 To 5) As String
Dim strCifras(0 To 4) As String
Dim NumeroCifras As Byte
Dim NumeroTercios As Byte
Dim strNumero As String
Dim strTMP As String
Dim dblNumeroEntero As Double
Dim intNumeroTmp As Integer
Dim intCentavos As Integer
Dim J As Integer
Dim intNumTmp As Integer
strUnidades(0) = " pesos m/cte": strUnidades(1) = " unidades":
strUnidades(2) = " dolares": strUnidades(3) = " euros": strUnidades(4) =
" " & Unidades: strUnidades(5) = ""
strUnidad(0) = " peso m/cte": strUnidad(1) = " unidad": strUnidad(2) = "
dolar": strUnidad(3) = " euro": strUnidad(4) = " " & Unidad: strUnidad(5)
= ""
strCifras(1) = "": strCifras(2) = " mil ": strCifras(3) = " millones ":
strCifras(4) = " mil ": strCifras(0) = " milln "
intCentavos = Int((Round(numero, 2) * 100) - (Int(numero) * 100))
dblNumeroEntero = Round(numero, 2) - (intCentavos / 100)
strNumero = CStr(Abs(dblNumeroEntero))
NumeroCifras = Len(strNumero)
NumeroTercios = Abs(Int(-NumeroCifras / 3))
Select Case dblNumeroEntero
Case 0
strTMP = "cero"
Case 1
If fmtoUnidad <> 5 Then
strTMP = "un"
strUnidades(fmtoUnidad) = strUnidad(fmtoUnidad)
Else
strTMP = "uno"
End If
If Genero <> "M" Then strTMP = "una"
Case 2 To 999
strTMP = CLetrasS1(CLetrasS3(dblNumeroEntero, 1), Genero)
Case 1000
strTMP = "mil"
Case 1000000
strTMP = "un milln"
Case 1000001 To 1999999
strCifras(3) = " milln "
For J = NumeroTercios To 1 Step -1
intNumTmp = CLetrasS3(dblNumeroEntero, J)
If intNumTmp <> 0 Then strTMP = strTMP & CLetrasS1(intNumTmp,
Genero) & strCifras(J)
Next J
Case Else
For J = NumeroTercios To 1 Step -1
intNumTmp = CLetrasS3(dblNumeroEntero, J)
If intNumTmp <> 0 Then strTMP = strTMP & CLetrasS1(intNumTmp,
Genero) & strCifras(J)
Next J
End Select
If Right(strTMP, 9) = "millones " Then strTMP = Mid(strTMP, 1,
(Len(strTMP) - 9)) & "millones de"
If Right(strTMP, 6) = "milln" Then strTMP = Mid(strTMP, 1, (Len(strTMP)
- 6)) & "milln de"
strTMP = strTMP & strUnidades(fmtoUnidad)
If intCentavos > 0 Then
Select Case fmtoUnidad
Case 0
strTMP = strTMP & " con " & CLetrasS1(intCentavos, Genero) &
" centavos"
Case 5
strTMP = strTMP & " punto " & CLetrasS1(intCentavos, Genero)
End Select
End If
'cambiar "un mil" o "una mil" por "mil"
strTMP = Replace(strTMP, "una mil", "mil", , , vbTextCompare)
strTMP = Replace(strTMP, "un mil", "mil", , , vbTextCompare)
CLetras = strTMP
End Function
'funcin que secundaria que calcula las decenas
Private Function CLetrasS2(numero As Integer, Genero As String) As String
Dim strUnidades(0 To 20) As String: Dim strDecenas(2 To 9) As String: Dim
Unidades As Byte: Dim Decenas As Byte: Dim strTMP As String
strUnidades(0) = "": strUnidades(2) = "dos": strUnidades(3) = "tres":
strUnidades(4) = "cuatro": strUnidades(5) = "cinco": strUnidades(6) =
"seis": strUnidades(7) = "siete": strUnidades(8) = "ocho": strUnidades(9)
= "nueve": strUnidades(10) = "diez": strUnidades(11) = "once":
strUnidades(12) = "doce": strUnidades(13) = "trece": strUnidades(14) =
"catorce": strUnidades(15) = "quince": strUnidades(16) = "diez y seis":
strUnidades(17) = "diez y siete": strUnidades(18) = "diez y ocho":
strUnidades(19) = "diez y nueve": strUnidades(20) = "veinte"
strDecenas(2) = "veinti": strDecenas(3) = "treinta": strDecenas(4) =
"cuarenta": strDecenas(5) = "cincuenta": strDecenas(6) = "sesenta":