Numeros a letras
Visual Basic
Publicado el 21 de Julio del 2003 por Jorge Zacarias
27.302 visualizaciones desde el 21 de Julio del 2003
Código que convierte un valor numérico a su correspondiente texto. El numero puede ir desde -999.999.999.999.999 hasta 999.999.999.999.999. Muy bueno.
Comentarios sobre la versión: Versión 1 (11)
Private Function ESCRITO(TxtNum As String) As String
'Autor : Miguel Antonio Caceres Tello
'Preguntas y Comentarios: [email protected]
'Lima-Peru
If Val(TxtNum) = 0 Then
ESCRITO = "CERO"
Exit Function
End If
Dim TRIO(0 To 9, 0 To 9, 0 To 9) As String 'POR COMODIDAD PERO...
Dim TRIOS As Integer 'numero de trios 'SE, QUE ME GASTA MEMORIA
Dim SALDO As Integer 'saldo de los trios
Dim I As Integer 'contador
Dim P As Integer 'primero
Dim S As Integer 'segundo
Dim T As Integer 'tercero
Dim L As Integer 'largo de la cadena
Dim M As Integer 'millares
Dim Y As String '
Dim UN As String
Dim MIL As String
Dim MILLON As String
Dim MILLONES As String
Dim TMP As String
Dim FRASE As String
Y = " Y "
UN = "UN "
MIL = " MIL "
MILLON = " MILLON "
MILLONES = " MILLONES "
TRIO(0, 0, 0) = ""
TRIO(0, 0, 1) = "UNO"
TRIO(0, 0, 2) = "DOS"
TRIO(0, 0, 3) = "TRES"
TRIO(0, 0, 4) = "CUATRO"
TRIO(0, 0, 5) = "CINCO"
TRIO(0, 0, 6) = "SEIS"
TRIO(0, 0, 7) = "SIETE"
TRIO(0, 0, 8) = "OCHO"
TRIO(0, 0, 9) = "NUEVE"
TRIO(0, 1, 1) = "ONCE"
TRIO(0, 1, 2) = "DOCE"
TRIO(0, 1, 3) = "TRECE"
TRIO(0, 1, 4) = "CATORCE"
TRIO(0, 1, 5) = "QUINCE"
TRIO(0, 1, 6) = "DIECISEIS"
TRIO(0, 1, 7) = "DIECISIETE"
TRIO(0, 1, 8) = "DIECIOCHO"
TRIO(0, 1, 9) = "DIECINUEVE"
TRIO(0, 1, 0) = "DIEZ"
TRIO(0, 2, 0) = "VEINTE"
TRIO(0, 3, 0) = "TREINTA"
TRIO(0, 4, 0) = "CUARENTA"
TRIO(0, 5, 0) = "CINCUENTA"
TRIO(0, 6, 0) = "SESENTA"
TRIO(0, 7, 0) = "SETENTA"
TRIO(0, 8, 0) = "OCHENTA"
TRIO(0, 9, 0) = "NOVENTA"
TRIO(1, 0, 0) = "CIEN"
TRIO(2, 0, 0) = "DOSCIENTOS"
TRIO(3, 0, 0) = "TRESCIENTOS"
TRIO(4, 0, 0) = "CUATROCIENTOS"
TRIO(5, 0, 0) = "QUINIENTOS"
TRIO(6, 0, 0) = "SEISCIENTOS"
TRIO(7, 0, 0) = "SETECIENTOS"
TRIO(8, 0, 0) = "OCHOCIENTOS"
TRIO(9, 0, 0) = "NOVECIENTOS"
L = Len(TxtNum)
TRIOS = Int(L / 3)
If TRIOS > 0 Then
SALDO = L Mod 3
If SALDO > 0 Then
TxtNum = String$(3 - SALDO, 48) + TxtNum
TRIOS = TRIOS + 1
End If
Else
TxtNum = String$(3 - L, 48) + TxtNum
TRIOS = 1
End If
For I = TRIOS To 1 Step -1
P = Val(Mid$(TxtNum, I * 3, 1))
S = Val(Mid$(TxtNum, I * 3 - 1, 1))
T = Val(Mid$(TxtNum, I * 3 - 2, 1))
If M = 1 Or M = 3 Then
If Not P + S + T = 0 Then FRASE = MIL + FRASE
End If
If M = 2 Then
If TRIOS < 4 Then
If P = 1 And S = 0 And T = 0 Then
FRASE = MILLON + FRASE
Else
FRASE = MILLONES + FRASE
End If
Else
FRASE = MILLONES + FRASE
End If
End If
TMP = FRASE
FRASE = ""
If T = 1 And (S > 0 Or P > 0) Then
FRASE = FRASE + TRIO(T, 0, 0) + "TO "
Else
FRASE = FRASE + TRIO(T, 0, 0) + " "
End If
If S = 1 Then
FRASE = FRASE + TRIO(0, S, P)
Else
If Not S = 0 Then FRASE = FRASE + TRIO(0, S, 0)
End If
If S = 0 Then
If P = 1 Then
FRASE = FRASE + UN
ElseIf P > 1 Then
FRASE = FRASE + TRIO(0, 0, P)
End If
ElseIf S > 1 Then
If Not P = 0 Then
If P = 1 Then
FRASE = FRASE + Y + UN
Else
FRASE = FRASE + Y + TRIO(0, 0, P)
End If
End If
End If
FRASE = Trim(FRASE)
FRASE = FRASE + TMP
M = M + 1
Next I
ESCRITO = FRASE
End Function
Yo tengo una función que es un poco más práctica, está en este sitio hace ya harto tiempo, la gracia es que los números los entrega \"comprensibles\", no dice \"un mil\" por ejemplo, además, si pones un párrafo, convierte los números del párrafo, por ejemplo: 7 de noviembre -> siete de noviembre.
Zonomaz.
Saludos