carlosanpy
Usuario (Paraguay)

CONVERTIR NUMEROS A LETRAS SIN DECIMALES En esta ocación les traigo una función que convierte los numeros de una celda a su correspondiente "traducción". La forma en que se usa es la siguiente: 1- Una vez abierto excel presionamos Alt + F11, se abre el editor de Visual Basic. 2- Menú Insertar / Modulo 3- Copiamos el texto mas abajo y pegamos en el modulo abierto. 4- Volvemos a excel, en cualquier celda (ej: B7) ponemos un número. En otra celda haremos referencia a la B7 así: =Numletras(F7;0). Es sencillo, no? Aquí el codigo -------------------------------------------- Attribute VB_Name = "Módulo11" Option Explicit Dim cTexto As String 'Variable para las funciones Public Function Numletras(ByVal Numero As Double, ByVal Mayusculas As Integer) As String Dim NumTmp As String Dim c01 As Integer Dim c02 As Integer Dim pos As Integer Dim dig As Integer Dim cen As Integer Dim dec As Integer Dim uni As Integer Dim letra1 As String Dim letra2 As String Dim letra3 As String Dim Leyenda As String Dim Leyenda1 As String Dim TFNumero As String If Numero < 0 Then Numero = Abs(Numero) NumTmp = Format(Numero, "000000000000000.00" 'Le da un formato fijo c01 = 1 pos = 1 TFNumero = "" 'Para extraer tres digitos cada vez Do While c01 <= 5 c02 = 1 Do While c02 <= 3 'Extrae un digito cada vez de izquierda a derecha dig = Val(Mid(NumTmp, pos, 1)) Select Case c02 Case 1: cen = dig Case 2: dec = dig Case 3: uni = dig End Select c02 = c02 + 1 pos = pos + 1 Loop letra3 = Centena(uni, dec, cen) letra2 = Decena(uni, dec) letra1 = Unidad(uni, dec) Select Case c01 Case 1 If cen + dec + uni = 1 Then Leyenda = "billon " ElseIf cen + dec + uni > 1 Then Leyenda = "billones " End If Case 2 If cen + dec + uni >= 1 And Val(Mid(NumTmp, 7, 3)) = 0 Then Leyenda = "mil millones " ElseIf cen + dec + uni >= 1 Then Leyenda = "mil " End If Case 3 If cen + dec = 0 And uni = 1 Then Leyenda = "millon " ElseIf cen > 0 Or dec > 0 Or uni > 1 Then Leyenda = "millones " End If Case 4 If cen + dec + uni >= 1 Then Leyenda = "mil " End If Case 5 If cen + dec + uni >= 1 Then Leyenda = "" End If End Select c01 = c01 + 1 TFNumero = TFNumero + letra3 + letra2 + letra1 + Leyenda Leyenda = "" letra1 = "" letra2 = "" letra3 = "" Loop If Val(NumTmp) = 0 Or Val(NumTmp) < 1 Then Leyenda1 = "Cero con " ElseIf Val(NumTmp) = 1 Or Val(NumTmp) < 2 Then Leyenda1 = "con " ElseIf Val(Mid(NumTmp, 4, 12)) = 0 Or Val(Mid(NumTmp, 10, 6)) = 0 Then Leyenda1 = "con " Else Leyenda1 = "con " End If TFNumero = "" & TFNumero '& Leyenda1 & Mid(NumTmp, 17) & "/100 " 'If Mayusculas = 1 Then ' TFNumero = UCase(TFNumero) 'Else ' TFNumero = LCase(TFNumero) 'End If 'Numletras = "Son guaraníes " & TFNumero Numletras = TFNumero End Function Private Function Centena(ByVal uni As Integer, ByVal dec As Integer, _ ByVal cen As Integer) As String Select Case cen Case 1 If dec + uni = 0 Then cTexto = "cien " Else cTexto = "ciento " End If Case 2: cTexto = "doscientos " Case 3: cTexto = "trescientos " Case 4: cTexto = "cuatrocientos " Case 5: cTexto = "quinientos " Case 6: cTexto = "seiscientos " Case 7: cTexto = "setecientos " Case 8: cTexto = "ochocientos " Case 9: cTexto = "novecientos " Case Else: cTexto = "" End Select Centena = cTexto cTexto = "" End Function Private Function Decena(ByVal uni As Integer, ByVal dec As Integer) As String Select Case dec Case 1 Select Case uni Case 0: cTexto = "diez " Case 1: cTexto = "once " Case 2: cTexto = "doce " Case 3: cTexto = "trece " Case 4: cTexto = "catorce " Case 5: cTexto = "quince " Case 6 To 9: cTexto = "dieci" End Select Case 2 If uni = 0 Then cTexto = "veinte " ElseIf uni > 0 Then cTexto = "veinti" End If Case 3: cTexto = "treinta " Case 4: cTexto = "cuarenta " Case 5: cTexto = "cincuenta " Case 6: cTexto = "sesenta " Case 7: cTexto = "setenta " Case 8: cTexto = "ochenta " Case 9: cTexto = "noventa " Case Else: cTexto = "" End Select If uni > 0 And dec > 2 Then cTexto = cTexto + "y " Decena = cTexto cTexto = "" End Function Private Function Unidad(ByVal uni As Integer, ByVal dec As Integer) As String If dec <> 1 Then Select Case uni Case 1: cTexto = "un " Case 2: cTexto = "dos " Case 3: cTexto = "tres " Case 4: cTexto = "cuatro " Case 5: cTexto = "cinco " End Select End If Select Case uni Case 6: cTexto = "seis " Case 7: cTexto = "siete " Case 8: cTexto = "ocho " Case 9: cTexto = "nueve " End Select Unidad = cTexto cTexto = "" End Function ---------------------------------------------------------------------------------------- CONVERTIR NUMEROS A LETRAS CON DECIMALES También otra función pero con decimales, se hace la misma forma que la anterior pero para activar la función referenciar la celda asi =NumLetra(F7) (es mas sencillo no?) Aquí el código Attribute VB_Name = "Módulo1" Function num_letras(Numero As Double) As String Dim Letras As String Dim HuboCentavos As Boolean Dim Decimales As Double Decimales = Numero - Int(Numero) Numero = Int(Numero) Dim Numeros(90) As String Numeros(0) = "cero" Numeros(1) = "uno" Numeros(2) = "dos" Numeros(3) = "tres" Numeros(4) = "cuatro" Numeros(5) = "cinco" Numeros(6) = "seis" Numeros(7) = "siete" Numeros(8) = "ocho" Numeros(9) = "nueve" Numeros(10) = "diez" Numeros(11) = "once" Numeros(12) = "doce" Numeros(13) = "trece" Numeros(14) = "catorce" Numeros(15) = "quince" Numeros(20) = "veinte" Numeros(30) = "treinta" Numeros(40) = "cuarenta" Numeros(50) = "cincuenta" Numeros(60) = "sesenta" Numeros(70) = "setenta" Numeros(80) = "ochenta" Numeros(90) = "noventa" Do '*---> Centenas de Millón If (Numero < 1000000000) And (Numero >= 100000000) Then If (Int(Numero / 100000000) = 1) And ((Numero - (Int(Numero / 100000000) * 100000000)) < 1000000) Then Letras = Letras & "cien millones " Else Select Case Int(Numero / 100000000) Case 1 Letras = Letras & "ciento" Case 5 Letras = Letras & "quinientos" Case 7 Letras = Letras & "setecientos" Case 9 Letras = Letras & "novecientos" Case Else Letras = Letras & Numeros(Int(Numero / 100000000)) End Select If (Int(Numero / 100000000) <> 1) And (Int(Numero / 100000000) <> 5) And (Int(Numero / 100000000) <> 7) And (Int(Numero / 100000000) <> 9) Then Letras = Letras & "cientos " Else Letras = Letras & " " End If End If Numero = Numero - (Int(Numero / 100000000) * 100000000) End If '*---> Decenas de Millón If (Numero < 100000000) And (Numero >= 10000000) Then If Int(Numero / 1000000) < 16 Then Letras = Letras & Numeros(Int(Numero / 1000000)) Letras = Letras & " millones " Numero = Numero - (Int(Numero / 1000000) * 1000000) Else Letras = Letras & Numeros(Int(Numero / 10000000) * 10) Numero = Numero - (Int(Numero / 10000000) * 10000000) If Numero > 1000000 Then Letras = Letras & " y " End If End If End If '*---> Unidades de Millón If (Numero < 10000000) And (Numero >= 1000000) Then If Int(Numero / 1000000) = 1 Then Letras = Letras & " un millón " Else Letras = Letras & Numeros(Int(Numero / 1000000)) Letras = Letras & " millones " End If Numero = Numero - (Int(Numero / 1000000) * 1000000) End If '*---> Centenas de Millar If (Numero < 1000000) And (Numero >= 100000) Then If (Int(Numero / 100000) = 1) And ((Numero - (Int(Numero / 100000) * 100000)) < 1000) Then Letras = Letras & "cien mil " Else Select Case Int(Numero / 100000) Case 1 Letras = Letras & "ciento" Case 5 Letras = Letras & "quinientos" Case 7 Letras = Letras & "setecientos" Case 9 Letras = Letras & "novecientos" Case Else Letras = Letras & Numeros(Int(Numero / 100000)) End Select If (Int(Numero / 100000) <> 1) And (Int(Numero / 100000) <> 5) And (Int(Numero / 100000) <> 7) And (Int(Numero / 100000) <> 9) Then Letras = Letras & "cientos " Else Letras = Letras & " " End If End If Numero = Numero - (Int(Numero / 100000) * 100000) End If '*---> Decenas de Millar If (Numero < 100000) And (Numero >= 10000) Then If Int(Numero / 1000) < 16 Then Letras = Letras & Numeros(Int(Numero / 1000)) Letras = Letras & " mil " Numero = Numero - (Int(Numero / 1000) * 1000) Else Letras = Letras & Numeros(Int(Numero / 10000) * 10) Numero = Numero - (Int((Numero / 10000)) * 10000) If Numero > 1000 Then Letras = Letras & " y " Else Letras = Letras & " mil " End If End If End If '*---> Unidades de Millar If (Numero < 10000) And (Numero >= 1000) Then If Int(Numero / 1000) = 1 Then Letras = Letras & "un" Else Letras = Letras & Numeros(Int(Numero / 1000)) End If Letras = Letras & " mil " Numero = Numero - (Int(Numero / 1000) * 1000) End If '*---> Centenas If (Numero < 1000) And (Numero > 99) Then If (Int(Numero / 100) = 1) And ((Numero - (Int(Numero / 100) * 100)) < 1) Then Letras = Letras & "cien " Else Select Case Int(Numero / 100) Case 1 Letras = Letras & "ciento" Case 5 Letras = Letras & "quinientos" Case 7 Letras = Letras & "setecientos" Case 9 Letras = Letras & "novecientos" Case Else Letras = Letras & Numeros(Int(Numero / 100)) End Select If (Int(Numero / 100) <> 1) And (Int(Numero / 100) <> 5) And (Int(Numero / 100) <> 7) And (Int(Numero / 100) <> 9) Then Letras = Letras & "cientos " Else Letras = Letras & " " End If End If Numero = Numero - (Int(Numero / 100) * 100) End If '*---> Decenas If (Numero < 100) And (Numero > 9) Then If Numero < 16 Then Letras = Letras & Numeros(Int(Numero)) Numero = Numero - Int(Numero) Else Letras = Letras & Numeros(Int((Numero / 10)) * 10) Numero = Numero - (Int((Numero / 10)) * 10) If Numero > 0.99 Then Letras = Letras & " y " End If End If End If '*---> Unidades If (Numero < 10) And (Numero > 0.99) Then Letras = Letras & Numeros(Int(Numero)) Numero = Numero - Int(Numero) End If Loop Until (Numero = 0) '*---> Decimales If (Decimales > 0) Then Letras = Letras & " con " Letras = Letras & Format(Decimales * 100, "00" & " centavos" End If num_letras = Letras End Function Comenten