0% encontró este documento útil (0 votos)
615 vistas6 páginas

Codigo para Convertir Numeros en Letras

Este documento describe una función para convertir números a letras en español. La función toma un número como entrada y devuelve una cadena con la representación del número en letras. Usa subfunciones para convertir las partes enteras y decimales por separado, y para manejar los casos de números de 1, 2 y 3 dígitos.

Cargado por

Nestor Conforme
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
615 vistas6 páginas

Codigo para Convertir Numeros en Letras

Este documento describe una función para convertir números a letras en español. La función toma un número como entrada y devuelve una cadena con la representación del número en letras. Usa subfunciones para convertir las partes enteras y decimales por separado, y para manejar los casos de números de 1, 2 y 3 dígitos.

Cargado por

Nestor Conforme
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

Option Explicit

Option Compare Text


' Valores por defecto para Bolvares
Public Function NumLetra(Nmero As Double, Optional NumDecimales As Integer = 2, _
Optional Unidad As String = " ", Optional UdFracc As String
= " ", _
Optional Conexin As String = "COMA", Optional Cero As Boolean
= False, _
Optional UD_un_uno_a As Integer = 1, Optional Frac_un_uno_a
As Integer = 1) As String
' funcin para convertir nmeros a letra.
' se emplea un nmero tipo double, 8 bytes
' (Mximo NMEROS DE 15 DGITOS, a partir de ah son nmeros en coma flotante,
' y deberan introducirse como texto para poder mantener todas las cifras)
'Valores por defecto:
' se han incluido en la definicin de los argumentos de la funcin
Dim intSigno As Integer
Dim dblNmero As Double

' signo del nmero


' nmero a transformar, en positivo

Dim intParteEntera As Double


Dim intParteDecimal As Double
dblNmero = Abs(Nmero)
intSigno = Sgn(Nmero)
If NumDecimales >= 0 Then
Nmero = WorksheetFunction.Round(Nmero, NumDecimales)
intParteEntera = Int(Abs(Nmero))
intParteDecimal = Int(Round((Abs(Nmero) - intParteEntera) * 10 ^ NumDecimal
es, 0))
ElseIf NumDecimales < 0 Then
intParteDecimal = 0
intParteEntera = Round((Abs(Nmero) / 10 ^ Abs(NumDecimales)), 0) * 10 ^ Abs
(NumDecimales)
End If
If (intParteEntera = 0 And Not Cero) Or (intParteDecimal = 0 And Not Cero) T
hen Conexin = "" ' si no hay parte entera o decimal no ponemos el texto intermedi
o
NumLetra = Trim(Entero_Letra(intParteEntera, Unidad, Cero, UD_un_uno_a) & "
" & _
Conexin & " " & Entero_Letra(intParteDecimal, UdFracc, Cero,
Frac_un_uno_a))
' cuando el nmero sea negativo
If intSigno = -1 Then
NumLetra = "MENOS " & NumLetra
End If
End Function
Private Function Entero_Letra(Nmero As Double, Unidad As String, _
Cero As Boolean, un_o_a As Integer) As String
' funcin para convertir en texto nmeros enteros
' lo pongo como variable double en vez de entero largo, por si es un nmero muy gr
ande
Const intMaxGrupo As Integer = 3
' grupos de 6 cifras considerados. con 3
llegamos hasta Trillones.
Dim strResultado As String
' aqu almacenaremos provisionalmente la cadena
resultado

Dim lngAuxNum As Long


' nmero auxiliar para convertir el nmero por partes,
hasta seis cifras
Dim IntUnidades As Integer, IntMillares As Integer ' millares y unidades de
lngAuxNum
Dim dblAuxResto As Double ' nmero auxiliar, la parte todava por convertir
Dim strAuxUnidad As String
Dim Resultado As String
Dim i As Integer
Resultado = ""
'si tenemos un cero
If Nmero = 0 Then
Select Case Cero
Case True
Resultado = "COMA CERO " & Unidad
Case False
Resultado = "COMA CERO"
End Select
Entero_Letra = Trim(Resultado)
Exit Function
End If
dblAuxResto = Abs(Nmero)
For i = 0 To intMaxGrupo
' tomamos el nmero de 6 en 6 cifras
lngAuxNum = Round(((dblAuxResto / 10 ^ 6 - Int(dblAuxResto / 10 ^ 6)) *
10 ^ 6), 0)
IntUnidades = Round((lngAuxNum / 10 ^ 3 - Int(lngAuxNum / 10 ^ 3)) * 10
^ 3, 0)
IntMillares = (lngAuxNum - IntUnidades) / 10 ^ 3
If lngAuxNum <> 0 Or i = 0 Then
Select Case i
Case 0 'unidades
'unidades
strAuxUnidad = RTrim(" " & Unidad)
Resultado = cifra_3(IntUnidades, False, un_o_a) & strAuxUnid
ad
' millares
If IntMillares <> 0 Then
strAuxUnidad = " mil"
If IntMillares = 1 Then
Resultado = Trim(cifra_3(IntMillares, False, 0) & strA
uxUnidad & " " & Resultado)
Else
Resultado = Trim(cifra_3(IntMillares, False, un_o_a) &
strAuxUnidad & " " & Resultado)
End If
End If
Case 1 ' millones
' millones
If lngAuxNum = 1 Then
strAuxUnidad = " milln"
Else
strAuxUnidad = " millones"
End If
Resultado = Trim(cifra_3(IntUnidades, False, 1) & strAuxUnid
ad & " " & Resultado)

' mil millones


If IntMillares <> 0 Then
strAuxUnidad = " mil"
If IntMillares = 1 Then
Resultado = Trim(cifra_3(IntMillares, False, 0) & strA
uxUnidad & " " & Resultado)
Else
Resultado = Trim(cifra_3(IntMillares, False, 1) & strA
uxUnidad & " " & Resultado)
End If
End If
Case 2 ' billones
' billones
If lngAuxNum = 1 Then
strAuxUnidad = " billn"
Else
strAuxUnidad = " billones"
End If
Resultado = Trim(cifra_3(IntUnidades, False, 1) & strAuxUnid
ad & " " & Resultado)
' mil billones
If IntMillares <> 0 Then
strAuxUnidad = " mil"
If IntMillares = 1 Then
Resultado = Trim(cifra_3(IntMillares, False, 0) & strA
uxUnidad & " " & Resultado)
Else
Resultado = Trim(cifra_3(IntMillares, False, 1) & strA
uxUnidad & " " & Resultado)
End If
End If
Case 3 ' Trillones
' Trillones
If lngAuxNum = 1 Then
strAuxUnidad = " trilln"
Else
strAuxUnidad = " trillones"
End If
Resultado = Trim(cifra_3(IntUnidades, False, 1) & strAuxUnid
ad & " " & Resultado)
' mil trillones
If IntMillares <> 0 Then
strAuxUnidad = " mil"
If IntMillares = 1 Then
Resultado = Trim(cifra_3(IntMillares, False, 0) & strA
uxUnidad & " " & Resultado)
Else
Resultado = Trim(cifra_3(IntMillares, False, 1) & strA
uxUnidad & " " & Resultado)
End If
End If
End Select
End If
dblAuxResto = Int(dblAuxResto / 10 ^ 6) 'para el siguiente ciclo
If dblAuxResto = 0 Then Exit For
' si ya hemos acabado
Next

Entero_Letra = Trim(Replace(Resultado, " ", " "))


End Function
Private Function cifra_1(num As Integer, Cero As Boolean, un_o_a As Integer) As
String
' funcin para convertir en texto nmeros de una cifra
' num
el nmeroa convertir
' cero
verdadero 0->"cero" falso 0->""
' un_o_a
0: 1->""
1: 1->"un" 2: 1->"uno" 3: 1->"una"
Select Case num
Case 0
If Cero Then
cifra_1 = "COMA CERO"
Else
cifra_1 = "COMA CERO"
End If
Case 1
Select Case un_o_a
Case 0
cifra_1 = ""
Case 1
cifra_1 = "UN "
Case 2
cifra_1 = "UNO "
Case 3
cifra_1 = "UNA "
End Select
Case 2
cifra_1 = "DOS "
Case 3
cifra_1 = "TRES "
Case 4
cifra_1 = "CUATRO "
Case 5
cifra_1 = "CINCO "
Case 6
cifra_1 = "SEIS "
Case 7
cifra_1 = "SIETE "
Case 8
cifra_1 = "OCHO "
Case 9
cifra_1 = "NUEVE "
End Select
End Function
Private Function cifra_2(num As Integer, Cero As Boolean, un_o_a As Integer) As
String
' funcin para convertir en texto nmeros de una cifra
' num
el nmeroa convertir
' cero
verdadero 0->"cero" falso 0->""
' un_o_a
0: 1->""
1: 1->"un" 2: 1->"uno" 3: 1->"una"
Select Case num
Case Is < 10
cifra_2 = cifra_1(num, Cero, un_o_a)
Case 10
cifra_2 = "DIEZ "
Case 11

cifra_2 =
Case 12
cifra_2 =
Case 13
cifra_2 =
Case 14
cifra_2 =
Case 15
cifra_2 =
Case 16 To 19
cifra_2 =
Case 20
cifra_2 =
Case 21 To 29
cifra_2 =
Case 30
cifra_2 =
Case 31 To 39
cifra_2 =
Case 40
cifra_2 =
Case 41 To 49
cifra_2 =
Case 50
cifra_2 =
Case 51 To 59
cifra_2 =
Case 60
cifra_2 =
Case 61 To 69
cifra_2 =
Case 70
cifra_2 =
Case 71 To 79
cifra_2 =
Case 80
cifra_2 =
Case 81 To 89
cifra_2 =
Case 90
cifra_2 =
Case 91 To 99
cifra_2 =
End Select
End Function

"ONCE "
"DOCE "
"TRECE "
"CATORCE "
"QUINCE "
"DIECI " & cifra_1(num - 10, False, un_o_a)
"VEINTE "
"VEINTI" & cifra_1(num - 20, False, un_o_a)
"TREINTA "
"TREINTA Y " & cifra_1(num - 30, False, un_o_a)
"CUARENTA "
"CUARENTA Y " & cifra_1(num - 40, False, un_o_a)
"CINCUENTA "
"CINCUENTA Y " & cifra_1(num - 50, False, un_o_a)
"SESENTA "
"SESENTA Y " & cifra_1(num - 60, False, un_o_a)
"SETENTA "
"SETENTA Y " & cifra_1(num - 70, False, un_o_a)
"OCHENTA "
"OCHENTA Y " & cifra_1(num - 80, False, un_o_a)
"NOVENTA "
"NOVENTA Y " & cifra_1(num - 90, False, un_o_a)

Private Function cifra_3(num As Integer, Cero As Boolean, un_o_a As Integer) As


String
' funcin para convertir en texto nmeros de una cifra
' num
el nmeroa convertir
' cero
verdadero 0->"cero" falso 0->""
' un_o_a
0: 1->""
1: 1->"un" 2: 1->"uno" 3: 1->"una"
' se realizan llamadas a la funcion cifra_2 para valores inferiores a 100
Select Case num
Case Is < 100
cifra_3 = cifra_2(num, Cero, un_o_a)
Case 100
cifra_3 = "cien"
Case 101 To 199

cifra_3 = "ciento " & cifra_2(num - 100, False, un_o_a)


Case 200 To 299
If un_o_a = 3 Then
cifra_3 = "doscientas " & cifra_2(num - 200, False, un_o_a)
Else
cifra_3 = "doscientos " & cifra_2(num - 200, False, un_o_a)
End If
Case 300 To 399
If un_o_a = 3 Then
cifra_3 = "trescientas " & cifra_2(num - 300, False, un_o_a)
Else
cifra_3 = "trescientos " & cifra_2(num - 300, False, un_o_a)
End If
Case 400 To 499
If un_o_a = 3 Then
cifra_3 = "cuatrocientas " & cifra_2(num - 400, False, un_o_a)
Else
cifra_3 = "cuatrocientos " & cifra_2(num - 400, False, un_o_a)
End If
Case 500 To 599
If un_o_a = 3 Then
cifra_3 = "quinientas " & cifra_2(num - 500, False, un_o_a)
Else
cifra_3 = "quinientos " & cifra_2(num - 500, False, un_o_a)
End If
Case 600 To 699
If un_o_a = 3 Then
cifra_3 = "seiscientas " & cifra_2(num - 600, False, un_o_a)
Else
cifra_3 = "seiscientos " & cifra_2(num - 600, False, un_o_a)
End If
Case 700 To 799
If un_o_a = 3 Then
cifra_3 = "setecientas " & cifra_2(num - 700, False, un_o_a)
Else
cifra_3 = "setecientos " & cifra_2(num - 700, False, un_o_a)
End If
Case 800 To 899
If un_o_a = 3 Then
cifra_3 = "ochocientas " & cifra_2(num - 800, False, un_o_a)
Else
cifra_3 = "ochocientos " & cifra_2(num - 800, False, un_o_a)
End If
Case 900 To 999
If un_o_a = 3 Then
cifra_3 = "novecientas " & cifra_2(num - 900, False, un_o_a)
Else
cifra_3 = "novecientos " & cifra_2(num - 900, False, un_o_a)
End If
End Select
End Function

También podría gustarte