¿Qué fórmula aplico para convertir números a letras en excel?
Me gustaría saber que fórmula aplico para convertir números a letras en excel.
Ejemplo si en una celda coloco el valor 12'000.000 como hago para que en otra celda cualquiera me aparezca doce millones de pesos M/C
2 Respuestas
Te anexo una función.
Function CONVERTIRNUM(Numero As Double, Optional CentimosEnLetra As Boolean) As String
Dim Moneda As String
Dim Monedas As String
Dim Centimo As String
Dim Centimos As String
Dim Preposicion As String
Dim NumCentimos As Double
Dim Letra As String
Const Maximo = 1999999999999.99
'************************************************************
' Parámetros
'************************************************************
Moneda = "Peso" 'Nombre de Moneda (Singular)
Monedas = "Pesos" 'Nombre de Moneda (Plural)
Centimo = "Centavo" 'Nombre de Céntimos (Singular)
Centimos = "Centavos" 'Nombre de Céntimos (Plural)
Preposicion = "Con" 'Preposición entre Moneda y Céntimos
'************************************************************
'Validar que el Numero está dentro de los límites
If (Numero >= 0) And (Numero <= Maximo) Then
Letra = NUMERORECURSIVO((Fix(Numero))) 'Convertir el Numero en letras
'Si Numero = 1 agregar leyenda Moneda (Singular)
If (Numero = 1) Then
Letra = Letra & " " '& Moneda
'De lo contrario agregar leyenda Monedas (Plural)
Else
Letra = Letra & " " '& Monedas
End If
'NumCentimos = Round((Numero - Fix(Numero)) * 100) 'Obtener los centimos del Numero
NumCentimos = Round((Numero - Fix(Numero)) * 10) 'Obtener los centimos del Numero
'Si NumCentimos es mayor a cero inicar la conversión
If NumCentimos >= 0 Then
'Si el parámetro CentimosEnLetra es VERDADERO obtener letras para los céntimos
If CentimosEnLetra Then
Letra = Letra & " " & Preposicion & " " & NUMERORECURSIVO(Fix(NumCentimos)) 'Convertir los céntimos en letra
'Si NumCentimos = 1 agregar leyenda Centimos (Singular)
If (NumCentimos = 1) Then
Letra = Letra & " " '& Centimo
'De lo contrario agregar leyenda Centimos (Plural)
Else
Letra = Letra & " " '& Centimos
End If
'De lo contrario mostrar los céntimos como número
Else
If NumCentimos < 10 Then
'Letra = Letra & " 0" & NumCentimos & "/100"
Else
'Letra = Letra & " " & NumCentimos & "/100"
End If
End If
End If
If Right(Letra, 9) = "Millones " Then
Letra = Letra & "de "
End If
'Regresar el resultado final de la conversión
CONVERTIRNUM = Letra & " pesos M/C"
Else
'Si el Numero no está dentro de los límites, entivar un mensaje de error
CONVERTIRNUM = "ERROR: El número excede los límites."
End If
End Function
Function NUMERORECURSIVO(Numero As Long) As String
Dim Unidades, Decenas, Centenas
Dim Resultado As String
'**************************************************
' Nombre de los números
'**************************************************
Unidades = Array("", "Un", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciséis", "Diecisiete", "Dieciocho", "Diecinueve", "Veinte", "Veintiuno", "Veintidos", "Veintitres", "Veinticuatro", "Veinticinco", "Veintiseis", "Veintisiete", "Veintiocho", "Veintinueve")
Decenas = Array("", "Diez", "Veinte", "Treinta", "Cuarenta", "Cincuenta", "Sesenta", "Setenta", "Ochenta", "Noventa", "Cien")
Centenas = Array("", "Ciento", "Doscientos", "Trescientos", "Cuatrocientos", "Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos")
'**************************************************
Select Case Numero
Case 0
Resultado = "Cero"
Case 1 To 29
Resultado = Unidades(Numero)
Case 30 To 100
Resultado = Decenas(Numero \ 10) + IIf(Numero Mod 10 <> 0, " y " + NUMERORECURSIVO(Numero Mod 10), "")
Case 101 To 999
Resultado = Centenas(Numero \ 100) + IIf(Numero Mod 100 <> 0, " " + NUMERORECURSIVO(Numero Mod 100), "")
Case 1000 To 1999
Resultado = "Mil" + IIf(Numero Mod 1000 <> 0, " " + NUMERORECURSIVO(Numero Mod 1000), "")
Case 2000 To 999999
Resultado = NUMERORECURSIVO(Numero \ 1000) + " Mil" + IIf(Numero Mod 1000 <> 0, " " + NUMERORECURSIVO(Numero Mod 1000), "")
Case 1000000 To 1999999
Resultado = "Un Millón" + IIf(Numero Mod 1000000 <> 0, " " + NUMERORECURSIVO(Numero Mod 1000000), "")
Case 2000000 To 1999999999
Resultado = NUMERORECURSIVO(Numero \ 1000000) + " Millones" + IIf(Numero Mod 1000000 <> 0, " " + NUMERORECURSIVO(Numero Mod 1000000), "")
End Select
NUMERORECURSIVO = Resultado
End FunctionSigue las Instrucciones para una Función
- Abre tu libro de excel
- Para abrir VBa y poder pegar la función, Presiona Alt + F11
- En el menú elige Insertar / Módulo
- En el panel del lado derecho copia la función
- En cualquier celda utiliza la función, como cualquier otra función de excel
Por ejemplo, si en la celda B3, tienes 12,000,000. En la celda C3, escribe la siguiente fórmula:
=CONVERTIRNUM(B3)
Imagen:

Saludos. Dante Amor
Agrego una versión para @juan hernandez.
Function CONVERTIRNUM(Numero As Double, Optional CentimosEnLetra As Boolean) As String
Dim Moneda As String
Dim Monedas As String
Dim Centimo As String
Dim Centimos As String
Dim Preposicion As String
Dim NumCentimos As Long
Dim Letra As String
Const Maximo = 1999999999999.99
'************************************************************
' Parámetros
'************************************************************
Moneda = "Peso" 'Nombre de Moneda (Singular)
Monedas = "Pesos" 'Nombre de Moneda (Plural)
Centimo = "Centavo" 'Nombre de Céntimos (Singular)
Centimos = "Centavos" 'Nombre de Céntimos (Plural)
Preposicion = "Con" 'Preposición entre Moneda y Céntimos
'************************************************************
'Validar que el Numero está dentro de los límites
If (Numero >= 0) And (Numero <= Maximo) Then
Letra = NUMERORECURSIVO((Fix(Numero))) 'Convertir el Numero en letras
'Si Numero = 1 agregar leyenda Moneda (Singular)
If (Numero = 1) Then
Letra = Letra & " " '& Moneda
'De lo contrario agregar leyenda Monedas (Plural)
Else
Letra = Letra & " " '& Monedas
End If
NumCentimos = (Numero - Fix(Numero)) * 100 'Obtener los centimos del Numero
If NumCentimos >= 0 Then
'Si el parámetro CentimosEnLetra es VERDADERO obtener letras para los céntimos
If CentimosEnLetra Then
Letra = Letra & " " & Preposicion & " " & NUMERORECURSIVO(Fix(NumCentimos)) 'Convertir los céntimos en letra
'Si NumCentimos = 1 agregar leyenda Centimos (Singular)
If (NumCentimos = 1) Then
Letra = Letra & " " '& Centimo
'De lo contrario agregar leyenda Centimos (Plural)
Else
Letra = Letra & " " '& Centimos
End If
'De lo contrario mostrar los céntimos como número
Else
Letra = Letra & " pesos con " & Format(NumCentimos, "00") & "/100 M.N."
End If
End If
If Right(Letra, 9) = "Millones " Then
Letra = Letra & "de "
End If
'Regresar el resultado final de la conversión
CONVERTIRNUM = Letra
Else
'Si el Numero no está dentro de los límites, entivar un mensaje de error
CONVERTIRNUM = "ERROR: El número excede los límites."
End If
End Function
Function NUMERORECURSIVO(Numero As Long) As String
Dim Unidades, Decenas, Centenas
Dim Resultado As String
'**************************************************
' Nombre de los números
'**************************************************
Unidades = Array("", "Un", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciséis", "Diecisiete", "Dieciocho", "Diecinueve", "Veinte", "Veintiuno", "Veintidos", "Veintitres", "Veinticuatro", "Veinticinco", "Veintiseis", "Veintisiete", "Veintiocho", "Veintinueve")
Decenas = Array("", "Diez", "Veinte", "Treinta", "Cuarenta", "Cincuenta", "Sesenta", "Setenta", "Ochenta", "Noventa", "Cien")
Centenas = Array("", "Ciento", "Doscientos", "Trescientos", "Cuatrocientos", "Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos")
'**************************************************
Select Case Numero
Case 0
Resultado = "Cero"
Case 1 To 29
Resultado = Unidades(Numero)
Case 30 To 100
Resultado = Decenas(Numero \ 10) + IIf(Numero Mod 10 <> 0, " y " + NUMERORECURSIVO(Numero Mod 10), "")
Case 101 To 999
Resultado = Centenas(Numero \ 100) + IIf(Numero Mod 100 <> 0, " " + NUMERORECURSIVO(Numero Mod 100), "")
Case 1000 To 1999
Resultado = "Mil" + IIf(Numero Mod 1000 <> 0, " " + NUMERORECURSIVO(Numero Mod 1000), "")
Case 2000 To 999999
Resultado = NUMERORECURSIVO(Numero \ 1000) + " Mil" + IIf(Numero Mod 1000 <> 0, " " + NUMERORECURSIVO(Numero Mod 1000), "")
Case 1000000 To 1999999
Resultado = "Un Millón" + IIf(Numero Mod 1000000 <> 0, " " + NUMERORECURSIVO(Numero Mod 1000000), "")
Case 2000000 To 1999999999
Resultado = NUMERORECURSIVO(Numero \ 1000000) + " Millones" + IIf(Numero Mod 1000000 <> 0, " " + NUMERORECURSIVO(Numero Mod 1000000), "")
End Select
NUMERORECURSIVO = Resultado
End Function
- Compartir respuesta
Maestro Dante las funciones están muy limitadas, por ejemplo.
¿? CONVERTIRNUM(11112556893.20) genera "Desbordamiento" y tiene otras fallas
Es nuestro caso por la devaluación es necesario convertir cifras mayores.
El valor correcto para convertir este número es:
Once mil ciento doce millones quinientos cincuenta y seis mil ochocientos noventa y tres pesos con veinte centavos
Le dejo como complemento esta función
Public Function Convertir(Valor As String) As String Dim Decimales As String Dim Resultado As String Dim Negativo As String Dim Cent As String If IsNull(Valor) Then Exit Function Else If Not IsNumeric(Valor) Then Exit Function End If End If If Valor >= 1E+18 Then MsgBox "La cantidad introducida excede el límite." & vbCrLf & "La cantidad máxima permitida es de un trillón.", vbInformation End If If Valor < 0 Then Negativo = "menos" End If 'Separamos la parte entera de la decimal. Decimales = mid(Format(Valor, "##0.00"), InStr(1, Format(Valor, "##0.00"), ",", vbTextCompare) + 1) Valor = mid(Format(Valor, "##0.00"), 1, InStr(1, Format(Valor, "##0.00"), ",", vbTextCompare) - 1) If Valor < 0 Then Valor = -Valor End If If Valor < 1000000 Then Resultado = MenorMilio(Valor) End If If Valor >= 1000000 And Valor < 1000000000000# Then Resultado = MenorMilio(Int(Valor / 1000000)) & " " Resultado = Resultado & IIf(Int(Valor / 1000000) = 1, "millón", "millones") Resultado = Resultado & " " & MenorMilio(Valor - (Int(Valor / 1000000) * 1000000)) End If If Valor >= 1000000000000# And Valor < 1E+18 Then Resultado = MenorMilio(Int(Valor / 1000000000000#)) & " " Resultado = Resultado & IIf(Int(Valor / 1000000000000#) = 1, "billón", "billones") If Valor - (Int(Valor / 1000000000000#) * 1000000000000#) >= 1000000 Then Resultado = Resultado & " " & MenorMilio(Int((Valor - (Int(Valor / 1000000000000#) * 1000000000000#)) / 1000000)) & " " Resultado = Resultado & IIf(Int((Valor - (Int(Valor / 1000000000000#) * 1000000000000#)) / 1000000) = 1, "milio", "milions") Resultado = Resultado & " " & MenorMilio((CDec(Valor) - (Int(Valor / 1000000000000#) * 1000000000000#)) - (Int((Valor - (Int(Valor / 1000000000000#) * 1000000000000#)) / 1000000) * 1000000)) End If Resultado = Resultado & " " & MenorMilio(CDec(Valor) - (Int(Valor / 1000000000000#) * 1000000000000#)) End If 'Tratamiento de decimales If Decimales <> "" Then Decimales = MenorCent(Decimales) End If Resultado = Resultado & Switch(Round(Valor, 0) = 0, "", Valor < 2, " Euro", Valor >= 2, " pesos") 'Con esta condición controlo si es un céntimo o más de uno Cent = IIf(Decimales <> "un", " centavos", " centavo") If Round(Valor, 0) = 0 Then Resultado = IIf(Decimales <> "", Decimales & Cent, "") Else Resultado = Resultado & IIf(Decimales <> "", " con " & Decimales & Cent, "") End If Resultado = IIf(Negativo <> "", Negativo & " ", "") & Resultado 'Retorno el resultado en letras Convertir = Resultado End Function Public Function Menor21(Valor As String) As String If Valor = 0 Then Menor21 = "" If Valor = 1 Then Menor21 = "un" If Valor = 2 Then Menor21 = "dos" If Valor = 3 Then Menor21 = "tres" If Valor = 4 Then Menor21 = "cuatro" If Valor = 5 Then Menor21 = "cinco" If Valor = 6 Then Menor21 = "seis" If Valor = 7 Then Menor21 = "siete" If Valor = 8 Then Menor21 = "ocho" If Valor = 9 Then Menor21 = "nueve" If Valor = 10 Then Menor21 = "diez" If Valor = 11 Then Menor21 = "once" If Valor = 12 Then Menor21 = "doce" If Valor = 13 Then Menor21 = "trece" If Valor = 14 Then Menor21 = "catorce" If Valor = 15 Then Menor21 = "quince" If Valor = 16 Then Menor21 = "dieciseis" If Valor = 17 Then Menor21 = "diecisiete" If Valor = 18 Then Menor21 = "dieciocho" If Valor = 19 Then Menor21 = "diecinueve" If Valor = 20 Then Menor21 = "veinte" End Function Public Function MenorCent(Valor As String) As String If Val(Valor) <= 20 Then MenorCent = Menor21(Valor) If Val(Valor) > 20 And Val(Valor) < 30 Then MenorCent = "veinti" & Menor21(Valor - 20) If Val(Valor) = 30 Then MenorCent = "treinta" If Val(Valor) > 30 And Val(Valor) < 40 Then MenorCent = "treinta y " & Menor21(Valor - 30) If Val(Valor) = 40 Then MenorCent = "cuarenta" If Val(Valor) > 40 And Val(Valor) < 50 Then MenorCent = "cuarenta y " & Menor21(Valor - 40) If Val(Valor) = 50 Then MenorCent = "cincuenta" If Val(Valor) > 50 And Val(Valor) < 60 Then MenorCent = "cincuenta y " & Menor21(Valor - 50) If Val(Valor) = 60 Then MenorCent = "sesenta" If Val(Valor) > 60 And Val(Valor) < 70 Then MenorCent = "sesenta y " & Menor21(Valor - 60) If Val(Valor) = 70 Then MenorCent = "setenta" If Val(Valor) > 70 And Val(Valor) < 80 Then MenorCent = "setenta y " & Menor21(Valor - 70) If Val(Valor) = 80 Then MenorCent = "ochenta" If Val(Valor) > 80 And Val(Valor) < 90 Then MenorCent = "ochenta y " & Menor21(Valor - 80) If Val(Valor) = 90 Then MenorCent = "noventa" If Val(Valor) > 90 And Val(Valor) < 100 Then MenorCent = "noventa y " & Menor21(Valor - 90) End Function Public Function MenorMil(Valor As String) As String Dim Numero As String 'Compruebo si el numero es 9, le cambio el formato a "nove" para las centenas If Valor < 100 Then MenorMil = MenorCent(Valor) If Valor = 100 Then MenorMil = "cien" If Valor > 100 And Valor < 200 Then MenorMil = "ciento " & MenorCent(Valor Mod 100) If Valor >= 200 Then Numero = Menor21(Valor \ 100) Select Case Numero Case "cinco" Numero = "quiniento" MenorMil = Numero & IIf(Valor > 199, "s", "") & " " & MenorCent(Valor Mod 100) Case "siete" Numero = "sete" MenorMil = Numero & "ciento" & IIf(Valor > 199, "s", "") & " " & MenorCent(Valor Mod 100) Case "nueve" Numero = "nove" MenorMil = Numero & "ciento" & IIf(Valor > 199, "s", "") & " " & MenorCent(Valor Mod 100) Case Else MenorMil = Numero & "ciento" & IIf(Valor > 199, "s", "") & " " & MenorCent(Valor Mod 100) End Select End If End Function Public Function MenorMilio(Valor As String) As String If Valor < 1000 Then MenorMilio = MenorMil(Valor) End If If Valor = 1000 Then MenorMilio = "mil" End If If Valor > 1000 And Valor < 1000000 Then MenorMilio = IIf(Valor \ 1000 = 1, "mil ", MenorMil(Valor \ 1000) & " mil ") & MenorMil(Valor Mod 1000) End If End Function
Ejemplo de llamada
¿? Convertir(11112556893.20)
Once mil ciento doce millones quinientos cincuenta y seis mil ochocientos noventa y tres pesos con veinte centavos
- Compartir respuesta
Ahí tienes un área de oportunidad. Puedes corregir el código y poner aquí tu respuesta. - Dante Amor
Hola Dante me sirvió mucho esta respuesta pero me gustaría saber que hacer si quiero que valor en letras salga todo en letra mayúscula.Gracias - Maria Fernanda
Cambia esta línea en la macro: CONVERTIRNUM = Letra & " pesos M/C" por esta: CONVERTIRNUM = Ucase(Letra) - Dante Amor
gracias, función muy bien! - Maria Fernanda
¿Hola Dante soy de Argentina que significa M/C yo necesito que me salga por ejemplo 56,20 en cincuenta y seis con 20/100 como debería hacer? - Monica Caucota
En la macro, cambia esta línea Convertirnum= Letra & " pesos M/C" por esta Convertirnum= "en " & Letraen la fórmula cambia esto =Convertirnum(B3) por esto =Convertirnum(B3,falso)&"con " &texto((B3-entero(B3))*100, "00")&"/100" - Dante Amor
hola y como puedo hacer exactamente lo mismo desde un formulario con dos textbox? - german mendoza
Pon lo siguiente en un botón en tu formularioTextbox2.value = ConvertirNum(Textbox1.value) En el textbox1 debes poner el número, las letras aparecerán en el textbox2 - Dante Amor
GRacias - Raúl Lara
Hola buen día. Excelente respuesta, ya quedo activo en mi excel. Mil gracias por tu ayuda. - RUTH GONZALEZ
Hola buenas tardes para poner los centavos como por ejemplo $23.23 se podrá poner en la lectura de la cantidad veinte y tres pesos 23/100 - Juan Hernandez
Prueba con True o Verdadero =ConvertirNUM(B3, True) - Dante Amor
Hola me da otra cantidad en cualquier 76.88 Setenta y Seis Con Nueve pesos M/N - Juan Hernandez
la cantidad seria $76.88 con letra (Setenta y seis pesos con 88/100) - Juan Hernandez
Puse una nueva versión. Debes utilizar =ConvertirNum(B3) - Dante Amor