Escrito por Luis Cruz | última actualización: 07 de septiembre del 2020
Si tienes que generar recibos, cheques, facturas, etc. en Excel, escribir las cantidades en letras puede ser una tarea difícil. Por eso en este articulo te muestro como hacerlo de forma automática.
La forma más sencilla de convertir números a letras
Voy a mostrarte como generar el contenido en la columna B a partir de la columna A, de forma totalmente automática.

He creado un complemento de Excel, que automatiza este proceso, si nunca has usado o instalado un complemento puedes leer este artículo que explica cómo puedes instalar un complemento en Excel.
Puedes descargar en este enlace el complemento gratis para convertir números a letras.
Una vez instales el complemento tendrás una función adicional en Excel, la función se llama numletras
, esta recibe 3 parámetros, el primero es la cantidad en números, el segundo es el nombre de la moneda en singular, y el tercero es el nombre de la moneda en plural. Aquí hay un ejemplo:
=NumLetras(D12;"Dolar";"Dolares")

Convertir números a letras sin usar el complemento
Si deseas crear la macro tú mismo, en lugar de usar un complemento puedes hacer siguiendo estas instrucciones:
Primero ingresa a VBA presionando las teclas Alt+F11, e inserta un Módulo (Si ya tienes un módulo no necesitas insertar uno nuevo)

Ahora selecciona tú módulo (Module1)

Y en la ventana derecha ingresa este texto:
Function NumLetras(Valor As Currency, Optional MonedaSingular As String = "", Optional MonedaPlural As String = "") As String
Dim Cantidad As Currency, Centavos As Currency, Digito As Byte, PrimerDigito As Byte, SegundoDigito As Byte, TercerDigito As Byte, Bloque As String, NumeroBloques As Byte, BloqueCero
Dim Unidades As Variant, Decenas As Variant, Centenas As Variant, I As Variant 'Si esta como Option Explicit
Dim ValorEntero As Long
Dim ValorOriginal As Double
Valor = Round(Valor, 2)
Cantidad = Int(Valor)
ValorEntero = Cantidad
Centavos = (Valor - Cantidad) * 100
Unidades = Array("UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE", "VEINTE", "VEINTIUN", "VEINTIDOS", "VEINTITRES", "VEINTICUATRO", "VEINTICINCO", "VEINTISEIS", "VEINTISIETE", "VEINTIOCHO", "VEINTINUEVE")
Decenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA")
Centenas = Array("CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS")
NumeroBloques = 1
Do
PrimerDigito = 0
SegundoDigito = 0
TercerDigito = 0
Bloque = ""
BloqueCero = 0
For I = 1 To 3
Digito = Cantidad Mod 10
If Digito <> 0 Then
Select Case I
Case 1
Bloque = " " & Unidades(Digito - 1)
PrimerDigito = Digito
Case 2
If Digito <= 2 Then
Bloque = " " & Unidades((Digito * 10) + PrimerDigito - 1)
Else
Bloque = " " & Decenas(Digito - 1) & IIf(PrimerDigito <> 0, " Y", Null) & Bloque
End If
SegundoDigito = Digito
Case 3
Bloque = " " & IIf(Digito = 1 And PrimerDigito = 0 And SegundoDigito = 0, "CIEN", Centenas(Digito - 1)) & Bloque
TercerDigito = Digito
End Select
Else
BloqueCero = BloqueCero + 1
End If
Cantidad = Int(Cantidad / 10)
If Cantidad = 0 Then
Exit For
End If
Next I
Select Case NumeroBloques
Case 1
NumLetras = Bloque
Case 2
NumLetras = Bloque & IIf(BloqueCero = 3, Null, " MIL") & NumLetras
Case 3
NumLetras = Bloque & IIf(PrimerDigito = 1 And SegundoDigito = 0 And TercerDigito = 0, " MILLON", " MILLONES") & NumLetras
End Select
NumeroBloques = NumeroBloques + 1
Loop Until Cantidad = 0
'Millardos
If Valor >= 1000000000 Then
Dim millardos As Currency
Dim millarodsInt As Integer
Dim letras_Millardos As String
millarodsInt = Int(Valor / 1000000000)
millardos = millarodsInt
letras_Millardos = Replace(Trim(NumLetras(millardos)), "00/100", IIf(millarodsInt = 1, "MILLARDO", "MILLARDOS"))
NumLetras = letras_Millardos & NumLetras
End If
NumLetras = Trim(NumLetras) & " " & Format(Str(Centavos), "00") & "/100 " & IIf(ValorEntero = 1, MonedaSingular, MonedaPlural)
End Function
Y guarda los cambios presionando Ctrl+S o con el botón de Guardar en la barra de herramientas.
Nota: Si tienes algún problema hasta ahora puedes consultar este artículo, que explica con mayor detalle cómo crear una función propia.
Como usar la función para convertir los números a letras.
Puedes usar esta función como cualquier otra ingresando =NumLetras(A7,»Dolar»,»Dolares») en tu hoja de cálculo donde:
- A7 es una cantidad en números o celda que contiene un número
- «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.
- «Dólares», es también opcional y se usa para mostrar la moneda en plural, puedes dejarlo en blanco o ingresar otra moneda como Pesos, Lempiras, etc.
Si tuviste algún problema o quieres ver una demostración puedes bajar esta Hoja de cálculo con la función ya creada. Si lo que deseas es que esta función esté siempre disponible puedes descargar e instalar este complemento de excel. Si tienes problemas para instalarlo consulta el artículo para instalar complementos en Excel 2007 o 2010.
Esta es una muestra de todo lo que puedes hacer usando macros, el cielo es el límite, pero si aún no conoces mucho sobre macros o VBA, entonces este libro es perfecto para ti. Al final del año (2020) voy a publicar la segunda edición, que contendrá más de 100 macros de ejemplos. Todos los que compren esta primera edición, tendrán acceso a la segunda edición, porque simplemente voy a enviarlo como una actualización de libro, disponible para todas las compras previas.