You are on page 1of 20

NumLetras: Funcin para pasar (convertir) nmeros a letras

Te mostramos como crear tu propia funcin para convertir nmeros a letras, esto puede serte de mucha utilidad si usas Excel para imprimir facturas o reportes en los que debas ingresar un numero en letras.

NOTA: Puedes saltarte todos estos pasos e ir directo a descargar la hoja de Excel con una macro para convertir los nmeros a letras, si lo deseas. Si quieres que esta funcin este siempre disponible en tu Excel, puedes descargar e instalar este complemento gratis Primero ingresa a VBA presionando las teclas Alt+F11, e inserta un Modulo (Si ya tienes un modulo no necesitas insertar uno nuevo)

Ahora selecciona tu modulo (Module1)

Y en la ventana derecha ingresa este texto:


1 'Funcion para pasar numeros a letras Function NumLetras(Valor As Currency, Optional MonedaSingular As String 2 = "", Optional MonedaPlural As String = "") As String 3 Dim lyCantidad As Currency, lyCentavos As Currency, lnDigito As Byte, lnPrimerDigito As Byte, lnSegundoDigito As Byte, lnTercerDigito As

Byte, lcBloque As String, lnNumeroBloques As Byte, lnBloqueCero Dim laUnidades As Variant, laDecenas As Variant, laCentenas As Variant, 4 I As Variant 'Si esta como Option Explicit 5 Dim ValorEntero As Long 6 Valor = Round(Valor, 2) 7 lyCantidad = Int(Valor) 8 ValorEntero = lyCantidad 9 lyCentavos = (Valor - lyCantidad) * 100 laUnidades = Array("UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", 10 "DIECIOCHO", "DIECINUEVE", "VEINTE", "VEINTIUN", "VEINTIDOS", "VEINTITRES", "VEINTICUATRO", "VEINTICINCO", "VEINTISEIS", "VEINTISIETE", "VEINTIOCHO", "VEINTINUEVE") laDecenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA") laCentenas = Array("CIENTO", "DOSCIENTOS", "TRESCIENTOS", 12 "CUATROCIENTOS", "QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS") 11 13 lnNumeroBloques = 1 14 15 Do 16 lnPrimerDigito = 0 17 lnSegundoDigito = 0 18 lnTercerDigito = 0 19 lcBloque = "" 20 lnBloqueCero = 0 21 For I = 1 To 3 22 lnDigito = lyCantidad Mod 10 23 If lnDigito <> 0 Then 24 Select Case I 25 Case 1 26 lcBloque = " " & laUnidades(lnDigito - 1) 27 lnPrimerDigito = lnDigito 28 Case 2 29 If lnDigito <= 2 Then 30 lcBloque = " " & laUnidades((lnDigito * 10) + lnPrimerDigito - 1) 31 Else lcBloque = " " & laDecenas(lnDigito - 1) & IIf(lnPrimerDigito <> 0, 32 " Y", Null) & lcBloque 33 End If 34 lnSegundoDigito = lnDigito 35 Case 3 lcBloque = " " & IIf(lnDigito = 1 And lnPrimerDigito = 0 And 36 lnSegundoDigito = 0, "CIEN", laCentenas(lnDigito - 1)) & lcBloque 37 lnTercerDigito = lnDigito 38 End Select 39 Else 40 lnBloqueCero = lnBloqueCero + 1

41 End If 42 lyCantidad = Int(lyCantidad / 10) 43 If lyCantidad = 0 Then 44 Exit For 45 End If 46 Next I 47 Select Case lnNumeroBloques 48 Case 1 49 NumLetras = lcBloque 50 Case 2 NumLetras = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & NumLetras 52 Case 3 51 NumLetras = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTercerDigito = 0, " MILLON", " MILLONES") & NumLetras 54 End Select 53 55 lnNumeroBloques = lnNumeroBloques + 1 56 Loop Until lyCantidad = 0 NumLetras = NumLetras & " " & Format(Str(lyCentavos), "00") & "/100 " & IIf(ValorEntero = 1, MonedaSingular, MonedaPlural) 58 End Function 57

Y guarda los cambios presionando Ctrl+S o con el boton de Guardar en la barra de herramientas. Nota: Si tienes algn problema hasta ahora puedes consultar este articulo, que explica con mayor detalle como crear una funcin propia.

Como usar la funcin para convertir los nmeros a letras.


Puedes usar esta funcin como cualquier otra ingresando =NumLetras(A7,Dolar,Dolares) en tu hoja de calculo donde: 1. A7 es una cantidad en nmeros o celda que contiene un numero 2. Dolar es opcional y se usa para poner el nombre de la moneda en el texto convertido, puedes usar otras monedas como Peso, Lempira, etc. 3. Dolares, es tambin opcional y se usa para mostrar la moneda en plural, puedes dejarlo en blanco o ingresar otra moneda como Pesos, Lempiras, etc. Si tuviste algn problema o quieres ver una demostracin puedes bajar esta Hoja de calculo con la funcin ya creada. Si lo que deseas es que esta funcion este siempre disponible pudes descargar e instalar este complemento de excel. Si tienes problemas para instalarlo consulta el articulo para instalar complementos en Excel 2007 o 2010.

CONVERTIR NUMEROS A LETRAS SIN DECIMALES En esta ocacin les traigo una funcin que convierte los numeros de una celda a su correspondiente "traduccin". 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 nmero. En otra celda haremos referencia a la B7 as: =Numletras(F7;0). Es sencillo, no? Aqu el codigo -------------------------------------------Attribute VB_Name = "Mdulo11" 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" c01 = 1 pos = 1 TFNumero = ""

'Le da un formato fijo

'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 guaranes " & 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 Tambin otra funcin pero con decimales, se hace la misma forma que la anterior pero para activar la funcin referenciar la celda asi =NumLetra(F7) (es mas sencillo no?)

Aqu el cdigo Attribute VB_Name = "Mdulo1" 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 Milln 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 Milln 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 Milln If (Numero < 10000000) And (Numero >= 1000000) Then If Int(Numero / 1000000) = 1 Then Letras = Letras & " un milln " 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" End If num_letras = Letras End Function

& " centavos"

Descargar funcin Formula en Excel numeros a letras y moneda de tu pas.xla

FUNCTION CONVIERTENUMLETRA(NUMERO) DIM TEXTO DIM MILLONES DIM MILES DIM CIENTOS DIM DECIMALES DIM CADENA DIM CADMILLONES DIM CADMILES DIM CADCIENTOS TEXTO = NUMERO TEXTO = FORMATNUMBER(TEXTO, 2) TEXTO = RIGHT(SPACE(14) & TEXTO, 14) MILLONES = MID(TEXTO, 1, 3) MILES = MID(TEXTO, 5, 3) CIENTOS = MID(TEXTO, 9, 3) DECIMALES = MID(TEXTO, 13, 2) CADMILLONES = CONVIERTECIFRA(MILLONES, 1) CADMILES = CONVIERTECIFRA(MILES, 1) CADCIENTOS = CONVIERTECIFRA(CIENTOS, 0) IF TRIM(CADMILLONES) > "" THEN IF TRIM(CADMILLONES) = "UN" THEN CADENA = CADMILLONES & " MILLON" ELSE CADENA = CADMILLONES & " MILLONES" END IF END IF IF TRIM(CADMILES) > "" THEN CADENA = CADENA & " " & CADMILES & " MIL" END IF

IF TRIM(CADMILES & CADCIENTOS) = "UN" THEN CADENA = CADENA & "UNO PESOS" & DECIMALES & "/100" & " M.N. " ELSE IF MILES & CIENTOS = "000000" THEN CADENA = CADENA & " " & TRIM(CADCIENTOS) & " PESOS " & DECIMALES & "/100" & " M.N. " ELSE

CADENA = CADENA & " " & TRIM(CADCIENTOS) & " PESOS " & DECIMALES & "/100" & " M.N. " END IF END IF CONVIERTENUMLETRA = TRIM(CADENA) END FUNCTION FUNCTION CONVIERTECIFRA(TEXTO, SW) DIM CENTENA DIM DECENA DIM UNIDAD DIM TXTCENTENA DIM TXTDECENA DIM TXTUNIDAD CENTENA = MID(TEXTO, 1, 1) DECENA = MID(TEXTO, 2, 1) UNIDAD = MID(TEXTO, 3, 1) SELECT CASE CENTENA CASE "1" TXTCENTENA = "CIEN" IF DECENA & UNIDAD <> "00" THEN TXTCENTENA = "CIENTO" END IF CASE "2" TXTCENTENA = "DOSCIENTOS" CASE "3" TXTCENTENA = "TRESCIENTOS" CASE "4" TXTCENTENA = "CUATROCIENTOS" CASE "5" TXTCENTENA = "QUINIENTOS" CASE "6" TXTCENTENA = "SEISCIENTOS" CASE "7" TXTCENTENA = "SETECIENTOS" CASE "8" TXTCENTENA = "OCHOCIENTOS" CASE "9" TXTCENTENA = "NOVECIENTOS" END SELECT SELECT CASE DECENA CASE "1" TXTDECENA = "DIEZ" SELECT CASE UNIDAD CASE "1"

TXTDECENA = "ONCE" CASE "2" TXTDECENA = "DOCE" CASE "3" TXTDECENA = "TRECE" CASE "4" TXTDECENA = "CATORCE" CASE "5" TXTDECENA = "QUINCE" CASE "6" TXTDECENA = "DIECISEIS" CASE "7" TXTDECENA = "DIECISIETE" CASE "8" TXTDECENA = "DIECIOCHO" CASE "9" TXTDECENA = "DIECINUEVE" END SELECT CASE "2" TXTDECENA = "VEINTE" IF UNIDAD <> "0" THEN TXTDECENA = "VEINTI" END IF CASE "3" TXTDECENA = "TREINTA" IF UNIDAD <> "0" THEN TXTDECENA = "TREINTA Y " END IF CASE "4" TXTDECENA = "CUARENTA" IF UNIDAD <> "0" THEN TXTDECENA = "CUARENTA Y " END IF CASE "5" TXTDECENA = "CINCUENTA" IF UNIDAD <> "0" THEN TXTDECENA = "CINCUENTA Y " END IF CASE "6" TXTDECENA = "SESENTA" IF UNIDAD <> "0" THEN TXTDECENA = "SESENTA Y " END IF CASE "7"

TXTDECENA = "SETENTA" IF UNIDAD <> "0" THEN TXTDECENA = "SETENTA Y " END IF CASE "8" TXTDECENA = "OCHENTA" IF UNIDAD <> "0" THEN TXTDECENA = "OCHENTA Y " END IF CASE "9" TXTDECENA = "NOVENTA" IF UNIDAD <> "0" THEN TXTDECENA = "NOVENTA Y " END IF END SELECT IF DECENA <> "1" THEN SELECT CASE UNIDAD CASE "1" IF SW THEN TXTUNIDAD = "UN" ELSE TXTUNIDAD = "UNO" END IF CASE "2" TXTUNIDAD = "DOS" CASE "3" TXTUNIDAD = "TRES" CASE "4" TXTUNIDAD = "CUATRO" CASE "5" TXTUNIDAD = "CINCO" CASE "6" TXTUNIDAD = "SEIS" CASE "7" TXTUNIDAD = "SIETE" CASE "8" TXTUNIDAD = "OCHO" CASE "9" TXTUNIDAD = "NUEVE" END SELECT END IF CONVIERTECIFRA = TXTCENTENA & " " & TXTDECENA & TXTUNIDAD END FUNCTION