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

  1. 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.
  2. Haz clic en Insertar → Módulo. Aparece una ventana en blanco.
  3. Copia el código completo de abajo y pégalo en esa ventana.
  4. Cierra el editor (Alt + Q). La función ya está disponible.
  5. En cualquier celda escribe =NumeroALetras(A1) para convertir el valor de A1.
  6. 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

  1. Abre un libro de Excel nuevo y añade el código VBA del Método 1 siguiendo los pasos anteriores.
  2. Ve a Archivo → Guardar como.
  3. En «Tipo», elige Complemento de Excel (.xlam).
  4. Ponle un nombre como NumeroALetras.xlam y guárdalo en una ubicación accesible.
  5. Para instalarlo: ve a Archivo → Opciones → Complementos → Ir..., haz clic en Examinar, selecciona el archivo y acepta.
  6. 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⚠ ParcialPosibles problemas con acentos (dieciséis, veintiún)
Excel para Mac✔ Sí✔ SíAtajo Alt+F11 diferente: Fn+Alt+F11
Excel Online✘ No✘ NoNo soporta VBA. Usa la herramienta online
Google Sheets✘ No✘ NoNo 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.