Convertir Números a Letras en VBA Excel

Excel no tiene una función para convertir números a letras. Con esta macro VBA, añades =NumeroALetras() a cualquier celda. Instalación: 2 minutos. Compatible con Excel 2016, 2019 y 365.

Función completa

Copia este código en un módulo del Editor de Visual Basic de Excel:

Function NumeroALetras(ByVal numero As Double) As String
    Dim entero As Long
    Dim decimales As Integer
    entero = Int(numero)
    decimales = Round((numero - entero) * 100)
    NumeroALetras = ConvertirEntero(entero)
    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("", "cien", "doscientos", "trescientos", "cuatrocientos", "quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos")
    If n = 0 Then ConvertirEntero = "cero": Exit Function
    If n < 0 Then ConvertirEntero = "menos " & ConvertirEntero(-n): Exit Function
    Dim resultado As String
    resultado = ""
    If n >= 1000000 Then
        If Int(n / 1000000) = 1 Then resultado = "un millón " Else resultado = ConvertirEntero(Int(n / 1000000)) & " millones "
        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 "
        n = n Mod 1000
    End If
    If n >= 100 Then
        If n = 100 Then resultado = resultado & "cien " Else resultado = resultado & centenas(Int(n / 100)) & " "
        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)
    ElseIf n > 0 Then
        resultado = resultado & unidades(n)
    End If
    ConvertirEntero = Trim(resultado)
End Function

Importante: Guarda como .xlsm. Si guardas como .xlsx, Excel elimina la macro sin preguntar.

Cómo instalar la macro

  1. Abre Excel y presiona Alt + F11 (Mac: Fn + Alt + F11).
  2. Ve a Insertar → Módulo.
  3. Pega el código de arriba en la ventana del módulo.
  4. Cierra el editor (Alt + Q).
  5. En cualquier celda: =NumeroALetras(A1).
  6. Guarda como .xlsm: Archivo → Guardar como → Libro habilitado para macros (*.xlsm). Si guardas como .xlsx, la macro se elimina.

Cómo usar

  • =NumeroALetras(1500)mil quinientos
  • =NumeroALetras(3250.75)tres mil doscientos cincuenta con 75/100
  • =NumeroALetras(1000000)un millón
  • =NumeroALetras(A1) → convierte el valor de A1
  • =CONCATENAR("$", A1, " — ", NumeroALetras(A1)) → formato para cheques

Combínala con SI(), CONCATENAR() y TEXTO() para adaptarla a tus necesidades.

Casos de prueba

Introduce estos valores en la columna A y =NumeroALetras(A1) en la columna B:

Celda A (número) Resultado esperado (celda B)
0cero
15quince
100cien
150ciento cincuenta
500quinientos
1000mil
1500mil quinientos
10000diez mil
100000cien mil
1000000un millón
2500000dos millones quinientos mil
15250.75quince mil doscientos cincuenta con 75/100

Si todos coinciden, la macro funciona correctamente.

Decimales

Decimales a fracción sobre cien: =NumeroALetras(15250.75)quince mil doscientos cincuenta con 75/100. Para más precisión:

' Para 3 decimales
decimales = Round((numero - entero) * 1000)
If decimales > 0 Then
    NumeroALetras = NumeroALetras & " con " & decimales & "/1000"
End If

' Para 4 decimales
decimales = Round((numero - entero) * 10000)
If decimales > 0 Then
    NumeroALetras = NumeroALetras & " con " & decimales & "/10000"
End If

Pesos mexicanos

Añade esta función para agregar «PESOS M.N.»:

Function NumeroALetrasMXN(ByVal numero As Double) As String
    Dim entero As Long
    Dim decimales As Integer
    entero = Int(numero)
    decimales = Round((numero - entero) * 100)
    NumeroALetrasMXN = ConvertirEntero(entero)
    If decimales > 0 Then
        NumeroALetrasMXN = NumeroALetrasMXN & " con " & decimales & "/100"
    End If
    NumeroALetrasMXN = NumeroALetrasMXN & " PESOS M.N."
End Function

=NumeroALetrasMXN(15250.75)quince mil doscientos cincuenta con 75/100 PESOS M.N.

Compatibilidad

La macro VBA funciona en la mayoría de las versiones de Excel que soportan macros. La siguiente tabla resume la compatibilidad con las versiones más comunes:

Versión Compatible Notas
Excel 365✔ SíFunciona sin cambios
Excel 2021✔ SíFunciona sin cambios
Excel 2019✔ SíFunciona sin cambios
Excel 2016✔ SíFunciona sin cambios
Excel 2013✔ SíPuede haber diferencias de codificación de acentos
Excel 2010⚠ ParcialVerificar encoding de caracteres especiales
Excel para Mac⚠ ParcialVBA disponible pero atajos de teclado difieren
Excel Online✘ NoNo soporta macros VBA

En versiones de Excel 2010 y anteriores, es posible que los caracteres acentuados no se muestren correctamente si el archivo no está guardado con codificación Unicode. En Excel para Mac, el atajo para abrir el editor VBA es diferente (Fn + Alt + F11) pero el código funciona igual. Excel Online no soporta macros VBA de ninguna forma; para esos entornos, la alternativa es usar nuestra herramienta online que funciona directamente en el navegador.

Preguntas frecuentes

¿Es seguro usar macros VBA en Excel?

Sí. El código VBA que proporcionamos es completamente local: se ejecuta dentro de tu propio archivo de Excel y no se conecta a ningún servidor externo ni envía información. Las macros solo representan un riesgo cuando se descargan de fuentes no confiables y contienen código malicioso. Siempre revisa el código antes de ejecutarlo y usa la opción «Habilitar macros solo para esta sesión» si tienes dudas.

¿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 que la usen mostrarán el error #¿NOMBRE?. Si esto ocurre, deberás volver a pegar el código en el Editor VBA y guardar correctamente como .xlsm.

¿Puedo usar la función en varias hojas del mismo libro?

Sí. Una vez que el código está pegado en un módulo del libro, la función está disponible en todas las hojas de ese archivo sin necesidad de copiar el código en cada hoja. Sin embargo, si creas un libro nuevo, deberás repetir el proceso o usar un complemento .xlam para que la función esté disponible globalmente.

Herramienta Online

Convierte números a letras directamente en tu navegador.

Guía Completa para Excel

Métodos alternativos y más detalles sobre macros en Excel.

Pesos Mexicanos

Formato para cheques y facturas en México.