Convertir Números a Letras en Excel — VBA, Sin Macros y Fórmulas
Excel no incluye una función nativa para convertir números a letras. Esta guía cubre los tres métodos que realmente funcionan: una macro VBA (la más completa y confiable), una fórmula sin macros para entornos con restricciones, y un complemento .xlam para tener la función disponible en todos tus libros. Todo el código está listo para copiar, compatible con Excel 2010, 2016, 2019 y 365, con variante especial para pesos mexicanos.
Método 1 — Macro VBA: función =NumeroALetras() (recomendado)
El método más completo. Una vez instalado, =NumeroALetras() se comporta
como cualquier fórmula nativa de Excel: puedes arrastrarla, combinarla con otras funciones
y usarla en todas las hojas del libro. Convierte cualquier número a letras en español,
incluyendo decimales como fracción, negatives y hasta miles de millones.
Pasos para instalar el código VBA
- Abre tu libro de Excel y presiona Alt + F11 para abrir el Editor de Visual Basic. En Mac: Fn + Alt + F11 o ve a Herramientas → Editor de Visual Basic.
- Haz clic en Insertar → Módulo. Aparece una ventana en blanco.
- Copia el código completo de abajo y pégalo en esa ventana.
- Cierra el editor (Alt + Q). La función ya está disponible.
- En cualquier celda escribe
=NumeroALetras(A1)para convertir el valor de A1. - Importante: guarda el archivo como .xlsm (Libro habilitado para macros). Si guardas como .xlsx, Excel elimina la macro sin avisar.
Código VBA completo — copiar y pegar
Function NumeroALetras(ByVal numero As Double) As String
Dim entero As Long
Dim decimales As Integer
entero = Int(Abs(numero))
decimales = Round((Abs(numero) - entero) * 100)
If numero < 0 Then
NumeroALetras = "menos " & ConvertirEntero(entero)
Else
NumeroALetras = ConvertirEntero(entero)
End If
If decimales > 0 Then
NumeroALetras = NumeroALetras & " con " & decimales & "/100"
End If
End Function
Private Function ConvertirEntero(ByVal n As Long) As String
Dim unidades() As String
Dim decenas() As String
Dim centenas() As String
unidades = Array("", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez", "once", "doce", "trece", "catorce", "quince", "dieciséis", "diecisiete", "dieciocho", "diecinueve")
decenas = Array("", "", "veinte", "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa")
centenas = Array("", "ciento", "doscientos", "trescientos", "cuatrocientos", "quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos")
If n = 0 Then ConvertirEntero = "cero": Exit Function
Dim resultado As String
resultado = ""
If n >= 1000000000 Then
If Int(n / 1000000000) = 1 Then
resultado = "mil millones "
Else
resultado = ConvertirEntero(Int(n / 1000000000)) & " mil millones "
End If
n = n Mod 1000000000
End If
If n >= 1000000 Then
If Int(n / 1000000) = 1 Then
resultado = resultado & "un millón "
Else
resultado = resultado & ConvertirEntero(Int(n / 1000000)) & " millones "
End If
n = n Mod 1000000
End If
If n >= 1000 Then
If Int(n / 1000) = 1 Then
resultado = resultado & "mil "
Else
resultado = resultado & ConvertirEntero(Int(n / 1000)) & " mil "
End If
n = n Mod 1000
End If
If n >= 100 Then
If n = 100 Then
resultado = resultado & "cien "
Else
resultado = resultado & centenas(Int(n / 100)) & " "
End If
n = n Mod 100
End If
If n >= 20 Then
If n Mod 10 = 0 Then
resultado = resultado & decenas(Int(n / 10))
Else
resultado = resultado & decenas(Int(n / 10)) & " y " & unidades(n Mod 10)
End If
ElseIf n > 0 Then
resultado = resultado & unidades(n)
End If
ConvertirEntero = Trim(resultado)
End Function Ejemplos de uso
=NumeroALetras(1000)→ mil=NumeroALetras(1500)→ mil quinientos=NumeroALetras(3250.75)→ tres mil doscientos cincuenta con 75/100=NumeroALetras(1000000)→ un millón=NumeroALetras(A1+B1)→ convierte la suma de dos celdas=MAYUSC(NumeroALetras(A1))→ resultado en MAYÚSCULAS para cheques
Convertir números a letras en Excel para pesos mexicanos
Para cheques y facturas CFDI en México el banco exige el formato «[CANTIDAD] PESOS [CENTAVOS]/100 M.N.». Agrega esta función al mismo módulo VBA donde pegaste el código anterior:
Function NumeroALetrasMXN(ByVal numero As Double) As String
Dim entero As Long
Dim decimales As Integer
entero = Int(Abs(numero))
decimales = Round((Abs(numero) - entero) * 100)
NumeroALetrasMXN = UCase(ConvertirEntero(entero)) & " PESOS "
NumeroALetrasMXN = NumeroALetrasMXN & Format(decimales, "00") & "/100 M.N."
End Function Ejemplos de uso con pesos:
=NumeroALetrasMXN(1000)→ MIL PESOS 00/100 M.N.=NumeroALetrasMXN(1500)→ MIL QUINIENTOS PESOS 00/100 M.N.=NumeroALetrasMXN(3250.75)→ TRES MIL DOSCIENTOS CINCUENTA PESOS 75/100 M.N.=NumeroALetrasMXN(100000)→ CIEN MIL PESOS 00/100 M.N.
Método 2 — Convertir números a letras en Excel sin macros
Si tu empresa restringe el uso de macros VBA, tienes opciones limitadas pero útiles para casos específicos.
Fórmula para convertir el mes de número a letra
Para mostrar el nombre del mes en lugar del número (por ejemplo, en facturas):
=TEXTO(FECHA(2024,A1,1),"mmmm") Si A1 contiene 3, devuelve «marzo». Cambia el año por cualquier valor o referencia a celda.
Fórmula para columnas de Excel de números a letras
Excel usa letras para identificar columnas (A=1, B=2, Z=26, AA=27...). Para convertir un número de columna a su letra equivalente:
=SUSTITUIR(DIRECCION(1,A1,4),1,"") Si A1 contiene 1 devuelve «A», si contiene 27 devuelve «AA». Útil para macros y referencias dinámicas.
¿Por qué no hay fórmula nativa para cantidades monetarias?
Convertir «1500» en «mil quinientos» requiere lógica condicional compleja (decenas, centenas, irregulares como «quince», «cien» vs «ciento»...) que ninguna fórmula nativa de Excel puede manejar completamente. Para cantidades monetarias en cheques y facturas, el Método 1 (VBA) o el Método 3 (complemento .xlam) son las únicas opciones reales.
Método 3 — Complemento .xlam (función global para todos los libros)
Un complemento .xlam instala la función en Excel de forma permanente: estará disponible en todos tus libros sin necesidad de copiar el código cada vez. Es la mejor opción si usas esta conversión con frecuencia en distintos archivos.
Cómo crear tu propio complemento .xlam
- Abre un libro de Excel nuevo y añade el código VBA del Método 1 siguiendo los pasos anteriores.
- Ve a Archivo → Guardar como.
- En «Tipo», elige Complemento de Excel (.xlam).
- Ponle un nombre como NumeroALetras.xlam y guárdalo en una ubicación accesible.
- Para instalarlo: ve a Archivo → Opciones → Complementos → Ir..., haz clic en Examinar, selecciona el archivo y acepta.
- La función
=NumeroALetras()estará disponible en todos tus libros de Excel automáticamente.
Compatibilidad por versión de Excel
| Versión | VBA | Complemento .xlam | Notas |
|---|---|---|---|
| Excel 365 | ✔ Sí | ✔ Sí | Sin cambios, funciona completo |
| Excel 2019 | ✔ Sí | ✔ Sí | Sin cambios, funciona completo |
| Excel 2016 | ✔ Sí | ✔ Sí | Sin cambios, funciona completo |
| Excel 2013 | ✔ Sí | ✔ Sí | Verificar codificación de acentos |
| Excel 2010 | ⚠ Parcial | ⚠ Parcial | Posibles problemas con acentos (dieciséis, veintiún) |
| Excel para Mac | ✔ Sí | ✔ Sí | Atajo Alt+F11 diferente: Fn+Alt+F11 |
| Excel Online | ✘ No | ✘ No | No soporta VBA. Usa la herramienta online |
| Google Sheets | ✘ No | ✘ No | No compatible con VBA. Usa Apps Script con JS |
Preguntas frecuentes
¿Cómo convertir números a letras en Excel sin macros?
No existe una fórmula nativa de Excel que resuelva esto para cantidades monetarias completas.
La fórmula =CODIGO(MAYUSC(A1))-64 convierte letras a números (A=1, B=2...),
pero no sirve al revés para cantidades como «mil quinientos». Para cantidades
monetarias sin macros, la alternativa más práctica es usar nuestra
herramienta online y copiar el resultado a tu hoja de cálculo.
¿Es seguro usar macros VBA en Excel?
Sí. El código de esta página es completamente local: se ejecuta dentro de tu propio archivo de Excel y no se conecta a ningún servidor externo. Las macros solo representan riesgo cuando se descargan de fuentes no confiables. Siempre puedes revisar el código completo en el Editor de Visual Basic antes de ejecutarlo.
¿Qué pasa si guardo como .xlsx en lugar de .xlsm?
Excel eliminará automáticamente todo el código VBA sin mostrar advertencia alguna. La
función =NumeroALetras() dejará de funcionar y las celdas mostrarán el error
#¿NOMBRE?. Para recuperarla, vuelve a pegar el código en el Editor VBA
y guarda correctamente como .xlsm.
¿Puedo compartir el archivo .xlsm con otros usuarios?
Sí. Los destinatarios verán una barra amarilla con el botón «Habilitar contenido» al abrir el archivo. Algunos servidores de correo bloquean archivos .xlsm por seguridad; en ese caso comprímelo en un .zip antes de enviarlo.
¿Funciona en Excel Online o Google Sheets?
No. Excel Online no soporta macros VBA. Google Sheets tampoco es compatible con VBA, aunque puedes crear una función equivalente con Google Apps Script usando JavaScript. Para estos entornos usa nuestra herramienta online.
¿Cómo cambiar las columnas de Excel de números a letras?
Las columnas de Excel ya usan letras por defecto (A, B, C...). Si tu hoja muestra números en lugar de letras en los encabezados de columna, ve a Archivo → Opciones → Fórmulas y desactiva la casilla «Estilo de referencia F1C1». Las columnas volverán a mostrarse como letras.
¿Cómo convertir el mes de número a letra en Excel?
Usa la fórmula =TEXTO(FECHA(2024,A1,1),"mmmm") donde A1 contiene
el número del mes (1-12). Devuelve el nombre completo del mes en español:
«enero», «febrero», etc.
Herramienta Online
Convierte números a letras directamente en el navegador, sin instalar nada.
Pesos Mexicanos
Formato correcto para cheques y facturas CFDI en México.
Más código VBA
Variantes avanzadas: billones, monedas, mayúsculas automáticas.