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
- Abre Excel y presiona Alt + F11 (Mac: Fn + Alt + F11).
- Ve a Insertar → Módulo.
- Pega el código de arriba en la ventana del módulo.
- Cierra el editor (Alt + Q).
- En cualquier celda:
=NumeroALetras(A1). - 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) |
|---|---|
| 0 | cero |
| 15 | quince |
| 100 | cien |
| 150 | ciento cincuenta |
| 500 | quinientos |
| 1000 | mil |
| 1500 | mil quinientos |
| 10000 | diez mil |
| 100000 | cien mil |
| 1000000 | un millón |
| 2500000 | dos millones quinientos mil |
| 15250.75 | quince 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 | ⚠ Parcial | Verificar encoding de caracteres especiales |
| Excel para Mac | ⚠ Parcial | VBA disponible pero atajos de teclado difieren |
| Excel Online | ✘ No | No 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.