Excel no trae ninguna función para escribir un número con letra: hay que añadirla con una macro. Pega la función NumeroALetras en un módulo de VBA y escribe =NumeroALetras(A1): la cantidad 1234,56 pasa a «mil doscientos treinta y cuatro pesos con cincuenta y seis centavos».
Quien tiene poco tiempo puede ir al final. Allí está el ejercicio.
Por qué Excel no lo hace solo
Porque no existe una función predeterminada para eso. Lo confirma una respuesta de Microsoft en su comunidad de soporte: la salida que propone es pegar una función propia en un módulo de VBA. La que ofrece Microsoft escribe dólares y centavos en inglés; la de abajo está hecha para el español.
El mecanismo: cinco pasos
- Abre el libro en Excel y pulsa Alt + F11 para abrir el Editor de Visual Basic.
- En el menú Insertar, elige Módulo.
- Pega el código de más abajo en la ventana del módulo.
- Cierra el editor.
- Guarda el libro como Libro de Excel habilitado para macros (*.xlsm): un archivo .xlsx no conserva las macros.
Una macro puede hacer cualquier cosa en tu equipo, así que léela antes de pegarla. Esta solo calcula texto: no abre archivos ni se conecta a internet.
Option Explicit
' Convierte un numero en letras, en espanol (RAE). Ejemplo: =NumeroALetras(1234,56)
' Admite de 0 a 999 999 999 999,99. Uso:
' =NumeroALetras(A1) -> pesos y centavos
' =NumeroALetras(A1;"dólar";"dólares") -> otra moneda
' =NumeroALetras(A1;"";"") -> sin moneda
Function NumeroALetras(ByVal Valor As Variant, Optional ByVal Singular As String = "peso", Optional ByVal Plural As String = "pesos", Optional ByVal Centavo As String = "centavo", Optional ByVal Centavos As String = "centavos") As String
Dim n As Double, cents As Double, ent As Double, ce As Long, t As String
If Not IsNumeric(Valor) Then
NumeroALetras = "Valor no numérico"
Exit Function
End If
n = CDbl(Valor)
If n < 0 Or n >= 1000000000000# Then
NumeroALetras = "Fuera de rango"
Exit Function
End If
cents = Int(n * 100# + 0.5 + 0.000000001)
ent = Int(cents / 100#)
ce = CLng(cents - ent * 100#)
Dim ConMoneda As Boolean
ConMoneda = (Singular <> "" Or Plural <> "")
t = Entero(ent, ConMoneda)
If ent >= 1000000# And ent - Int(ent / 1000000#) * 1000000# = 0 Then t = t & " de"
If ent = 1 Then
If Singular <> "" Then t = t & " " & Singular
Else
If Plural <> "" Then t = t & " " & Plural
End If
If ce > 0 Then
t = t & " con " & Entero(CDbl(ce), ConMoneda)
If ce = 1 Then
If Centavo <> "" Then t = t & " " & Centavo
Else
If Centavos <> "" Then t = t & " " & Centavos
End If
End If
NumeroALetras = t
End Function
Private Function Entero(ByVal n As Double, ByVal ApocFinal As Boolean) As String
Dim hi As Double, lo As Double, s As String
If n = 0 Then
Entero = "cero"
Exit Function
End If
hi = Int(n / 1000000#)
lo = n - hi * 1000000#
If hi > 0 Then
If hi = 1 Then
s = "un millón"
Else
s = Grupo(CLng(hi), True) & " millones"
End If
End If
If lo > 0 Then
If s <> "" Then s = s & " "
s = s & Grupo(CLng(lo), ApocFinal)
End If
Entero = s
End Function
Private Function Grupo(ByVal n As Long, ByVal Apoc As Boolean) As String
Dim m As Long, r As Long, s As String, w As String
m = n \ 1000
r = n Mod 1000
If m > 0 Then
If m = 1 Then
s = "mil"
Else
s = Apocopar(MenosDeMil(m)) & " mil"
End If
End If
If r > 0 Then
w = MenosDeMil(r)
If Apoc Then w = Apocopar(w)
If s <> "" Then s = s & " "
s = s & w
End If
Grupo = s
End Function
Private Function MenosDeMil(ByVal n As Long) As String
Dim c As Long, r As Long, s As String
Dim uni As Variant, dec As Variant, cen As Variant
uni = Array("cero", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez", "once", "doce", "trece", "catorce", "quince", "dieciséis", "diecisiete", "dieciocho", "diecinueve", "veinte", "veintiuno", "veintidós", "veintitrés", "veinticuatro", "veinticinco", "veintiséis", "veintisiete", "veintiocho", "veintinueve")
dec = Array("", "", "", "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa")
cen = Array("", "ciento", "doscientos", "trescientos", "cuatrocientos", "quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos")
If n = 100 Then
MenosDeMil = "cien"
Exit Function
End If
c = n \ 100
r = n Mod 100
If c > 0 Then s = cen(c)
If r > 0 Then
If s <> "" Then s = s & " "
If r < 30 Then
s = s & uni(r)
ElseIf r Mod 10 = 0 Then
s = s & dec(r \ 10)
Else
s = s & dec(r \ 10) & " y " & uni(r Mod 10)
End If
End If
MenosDeMil = s
End Function
Private Function Apocopar(ByVal s As String) As String
If Right(s, 9) = "veintiuno" Then
Apocopar = Left(s, Len(s) - 9) & "veintiún"
ElseIf Right(s, 3) = "uno" Then
Apocopar = Left(s, Len(s) - 3) & "un"
Else
Apocopar = s
End If
End Function
Cómo se usa
| Fórmula | Resultado |
|---|---|
=NumeroALetras(A1) con 21 en A1 |
veintiún pesos |
=NumeroALetras(1000000) |
un millón de pesos |
=NumeroALetras(A1;"dólar";"dólares") con 1 en A1 |
un dólar |
=NumeroALetras(A1;"";"") con 21 en A1 |
veintiuno |
=MAYUSC(NumeroALetras(A1)) con 16 en A1 |
DIECISÉIS PESOS |
Según la configuración de tu Excel, los argumentos se separan con punto y coma (;) o con coma (,). Usa el que te pida tu Excel. La función escribe en minúsculas; para mayúsculas, envuélvela en MAYUSC (en Excel en inglés, UPPER).
La prueba del pariente: comprueba que está bien pegada
Escribe =NumeroALetras(21), =NumeroALetras(1000000) y =NumeroALetras(0). Deben dar veintiún pesos, un millón de pesos y cero pesos. Si los tres coinciden, la macro funciona. La función se ha comprobado con 27 importes, desde 0 hasta 999 999 999 999,99.
Lo que no hace
Llega hasta 999 999 999 999,99 y solo escribe monedas masculinas: con un sustantivo femenino habría que cambiar un por una a mano. Si prefieres no usar macros, escribe la cantidad en el conversor de número a letras y copia el resultado.
Las reglas salen del artículo «cardinales» del Diccionario panhispánico de dudas.
Practica: ¿qué devuelve la fórmula?
Cuatro casos.
1. =NumeroALetras(21)
👉 veintiún pesos: uno se acorta delante del sustantivo.
2. =NumeroALetras(1000000)
👉 un millón de pesos: millón solo pide de.
3. =NumeroALetras(0)
👉 cero pesos: el cero va con plural.
4. =NumeroALetras(1;"dólar";"dólares")
👉 un dólar: con 1 se usa el singular.
Si encuentras un error en esta página, escríbeme: se corrige y la corrección se publica.
Perfil del autor
- Escritura Correcta la escribe una sola persona, bajo seudónimo. No soy filólogo ni corrector profesional: cada regla que se explica aquí es una que tuve que aprender de forma consciente, y por eso viene siempre con su porqué y nunca con un «como suene». Si encuentras un error, escríbeme: se corrige y la corrección se publica.
Últimas entradas
Reglas de ortografía04/10/2026Valor en letras: cómo se escribe, con ejemplos en pesos
Reglas de ortografía04/10/2026Cantidad con letra: cómo se escribe, con ejemplos en pesos
Reglas de ortografía04/10/2026Convertir número a letras en Excel: macro lista para pegar
Reglas de ortografía04/10/2026Números en letras del 1 al 100 y hasta el 1000: lista y reglas