DocumentemplateEmpieza gratis

Cómo convertir un número a letras en Excel (con macro lista para copiar)

Excel no tiene una función para escribir importes en letra. Te damos una macro probada para tener =NumeroALetras(A1) en euros y otras formas de hacerlo sin complicarte.

Si buscas en Excel una función que convierta 1.250,50 en «mil doscientos cincuenta euros con cincuenta céntimos», no la vas a encontrar: Excel no trae ninguna función para escribir números en letra en español. La única que existe, BAHTTEXT, lo hace en tailandés.

¿Lo necesitas para tus documentos? Si el importe en letra es para facturas, recibos, contratos o pagarés, en Documentemplate no tienes que hacer nada: la función ya viene incluida. Escribes letra(total) en la plantilla y cada documento sale con su importe en letra, también cuando los generas desde tu hoja de Excel. Sin macros ni archivos .xlsm.

Si lo quieres dentro de Excel, hay tres formas de conseguirlo, según lo que necesites.

Si solo necesitas un importe: el convertidor

Para una factura, un recibo o un cheque sueltos, lo más rápido es el convertidor de números a letras: escribes la cifra, eliges la moneda y copias el texto, en minúsculas o en mayúsculas. No hace falta instalar nada.

Si lo necesitas en muchas celdas: una macro

Con una pequeña macro de VBA tendrás tu propia función, =NumeroALetras(A1), que se usa como cualquier otra fórmula.

Paso a paso

  1. Abre el libro y pulsa Alt + F11 para abrir el editor de Visual Basic.
  2. En el menú, Insertar → Módulo.
  3. Pega el código de abajo y cierra el editor.
  4. En cualquier celda, escribe =NumeroALetras(B2), donde B2 es la celda con el importe.
  5. Guarda el archivo como Libro de Excel habilitado para macros (.xlsm); si lo guardas como .xlsx, la macro se pierde.
' =NumeroALetras(A1)  →  «mil doscientos cincuenta euros con cincuenta céntimos»
' Importes hasta 999.999.999,99 €.
Function NumeroALetras(ByVal importe As Double) As String
    Dim euros As Long, centimos As Long, texto As String
    If importe < 0 Then
        NumeroALetras = "menos " & NumeroALetras(-importe)
        Exit Function
    End If
    If importe >= 1000000000 Then
        NumeroALetras = "Importe demasiado grande"
        Exit Function
    End If
    euros = Int(importe)
    centimos = Int((importe - euros) * 100 + 0.5)
    If centimos = 100 Then
        euros = euros + 1
        centimos = 0
    End If
    If euros = 1 Then
        texto = "un euro"
    Else
        texto = Apocope(Entero(euros))
        If euros >= 1000000 And euros Mod 1000000 = 0 Then texto = texto & " de"
        texto = texto & " euros"
    End If
    If centimos = 1 Then
        texto = texto & " con un céntimo"
    ElseIf centimos > 1 Then
        texto = texto & " con " & Apocope(Entero(centimos)) & " céntimos"
    End If
    NumeroALetras = texto
End Function

Private Function Entero(ByVal n As Long) As String
    Dim millones As Long, miles As Long, resto As Long, texto As String
    If n = 0 Then
        Entero = "cero"
        Exit Function
    End If
    millones = n \ 1000000
    miles = (n Mod 1000000) \ 1000
    resto = n Mod 1000
    If millones = 1 Then
        texto = "un millón"
    ElseIf millones > 1 Then
        texto = Apocope(Centenas(millones)) & " millones"
    End If
    If miles = 1 Then
        texto = texto & " mil"
    ElseIf miles > 1 Then
        texto = texto & " " & Apocope(Centenas(miles)) & " mil"
    End If
    If resto > 0 Then texto = texto & " " & Centenas(resto)
    Entero = Trim(texto)
End Function

Private Function Centenas(ByVal n As Long) As String
    Dim c As Long, r As Long, texto As String
    If n = 100 Then
        Centenas = "cien"
        Exit Function
    End If
    c = n \ 100
    r = n Mod 100
    If c > 0 Then texto = Split("_ ciento doscientos trescientos cuatrocientos quinientos seiscientos setecientos ochocientos novecientos")(c)
    If r > 0 Then
        If r < 30 Then
            texto = texto & " " & Split("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")(r)
        Else
            texto = texto & " " & Split("_ _ _ treinta cuarenta cincuenta sesenta setenta ochenta noventa")(r \ 10)
            If r Mod 10 > 0 Then texto = texto & " y " & Split("cero uno dos tres cuatro cinco seis siete ocho nueve")(r Mod 10)
        End If
    End If
    Centenas = Trim(texto)
End Function

Private Function Apocope(ByVal texto As String) As String
    If Right(texto, 9) = "veintiuno" Then
        Apocope = Left(texto, Len(texto) - 9) & "veintiún"
    ElseIf Right(texto, 3) = "uno" Then
        Apocope = Left(texto, Len(texto) - 1)
    Else
        Apocope = texto
    End If
End Function

Trucos

  • En mayúsculas, como en los cheques y pagarés: =MAYUSC(NumeroALetras(B2)).
  • Redondea antes si la celda viene de un cálculo: =NumeroALetras(REDONDEAR(B2;2)), para que los céntimos coincidan con la cifra que se ve.
  • Pesos en vez de euros: cambia "un euro" por "un peso", " euros" por " pesos" y los céntimos por centavos. «Peso» es masculino, igual que «euro», así que el resto vale tal cual.
  • Macros y seguridad: al abrir el archivo, Excel te pedirá habilitar el contenido. Las macros no funcionan en Excel para la web ni en Google Sheets.

Las reglas que la macro ya tiene en cuenta

Escribir importes en letra tiene sus trampas, y la macro las respeta:

Cifra En letra
21 € veintiún euros (no «veintiuno euros»)
101 € ciento un euros
1.000.000 € un millón de euros
1.200.000 € un millón doscientos mil euros
21.000,21 € veintiún mil euros con veintiún céntimos

Si quieres comprobar cualquier otra, el convertidor usa exactamente las mismas reglas: la macro está probada contra él con miles de cifras.

Si el importe en letra va en documentos que generas desde Excel

Si escribes el importe en letra porque luego copias los datos de Excel a facturas, recibos o contratos, la macro te ahorra la mitad del trabajo, pero no la otra mitad.

En Documentemplate la plantilla calcula el importe en letra sola, con la fórmula letra(total), y puedes generar los documentos directamente desde tu hoja de cálculo: un PDF por fila, cada uno con su importe en cifra y en letra.

Pruébalo gratis

Deja de escribir el mismo documento a mano

Diseña la plantilla una vez en Documentemplate y genera cada factura, presupuesto o informe en segundos, con tu papelería y las cuentas hechas.

Crear cuenta gratis

Más artículos