El Profe Arci – Mtro. Fernando Arciniega –

Cómo convertir números a letras en Excel paso a paso

Publicado el 27 marzo, 2025
por Mtro. Fernando Omar Arciniega Martínez

Cómo convertir números a letras en Excel paso a paso

En muchas ocasiones necesitamos que un número se exprese en letras, ya sea para crear facturas, recibos, cheques u otros documentos formales. Aunque Excel no cuenta con una función nativa para convertir números a letras en español, existen formas sencillas de lograrlo mediante macros. En esta entrada te explico cómo hacerlo paso a paso.


📌 ¿Qué es una macro en Excel?

Una macro es una serie de instrucciones programadas con VBA (Visual Basic for Applications) que automatizan tareas. En este caso, la macro se encargará de convertir automáticamente un número en su equivalente escrito con letras.


🛠️ Pasos para convertir números a letras en Excel

1. Abre el editor de Visual Basic

  • Presiona ALT + F11 para abrir el Editor de Visual Basic.
  • En el menú, selecciona Insertar > Módulo.

2. Copia y pega el siguiente código

Este código convierte números a letras en español:

Function NumLetras(ByVal MyNumber)
    Dim Pesos, Centavos, Temp
    Dim DecimalPlace, Count
    Dim Place(9) As String
    Place(2) = " mil "
    Place(3) = " millones "
    Place(4) = " mil millones "
    Place(5) = " billones "

    ' Convierte el número en texto
    MyNumber = Trim(Str(MyNumber))

    ' Encuentra el punto decimal
    DecimalPlace = InStr(MyNumber, ".")
    If DecimalPlace > 0 Then
        Centavos = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2))
        MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
    End If

    Count = 1
    Do While MyNumber <> ""
        Temp = GetHundreds(Right(MyNumber, 3))
        If Temp <> "" Then Pesos = Temp & Place(Count) & Pesos
        If Len(MyNumber) > 3 Then
            MyNumber = Left(MyNumber, Len(MyNumber) - 3)
        Else
            MyNumber = ""
        End If
        Count = Count + 1
    Loop

    NumLetras = Application.Trim(Pesos)

End Function

Private Function GetHundreds(ByVal MyNumber)
    Dim Result As String
    If Val(MyNumber) = 0 Then Exit Function
    MyNumber = Right("000" & MyNumber, 3)

    If Mid(MyNumber, 1, 1) <> "0" Then
        Select Case Mid(MyNumber, 1, 1)
            Case "1": Result = "ciento "
            Case "2": Result = "doscientos "
            Case "3": Result = "trescientos "
            Case "4": Result = "cuatrocientos "
            Case "5": Result = "quinientos "
            Case "6": Result = "seiscientos "
            Case "7": Result = "setecientos "
            Case "8": Result = "ochocientos "
            Case "9": Result = "novecientos "
        End Select
    End If

    Result = Result & GetTens(Mid(MyNumber, 2))
    GetHundreds = Result
End Function

Private Function GetTens(TensText)
    Dim Result As String
    If Val(Left(TensText, 1)) = 1 Then
        Select Case Val(TensText)
            Case 10: Result = "diez"
            Case 11: Result = "once"
            Case 12: Result = "doce"
            Case 13: Result = "trece"
            Case 14: Result = "catorce"
            Case 15: Result = "quince"
            Case 16: Result = "dieciséis"
            Case 17: Result = "diecisiete"
            Case 18: Result = "dieciocho"
            Case 19: Result = "diecinueve"
            Case Else
        End Select
    Else
        Select Case Val(Left(TensText, 1))
            Case 2: Result = "veinte"
            Case 3: Result = "treinta"
            Case 4: Result = "cuarenta"
            Case 5: Result = "cincuenta"
            Case 6: Result = "sesenta"
            Case 7: Result = "setenta"
            Case 8: Result = "ochenta"
            Case 9: Result = "noventa"
            Case Else
        End Select

        If Right(TensText, 1) <> "0" Then
            If Val(Left(TensText, 1)) = 2 Then
                Result = "veinti" & GetDigit(Right(TensText, 1))
            Else
                Result = Result & " y " & GetDigit(Right(TensText, 1))
            End If
        End If
    End If
    GetTens = Result
End Function

Private Function GetDigit(Digit)
    Select Case Val(Digit)
        Case 1: GetDigit = "uno"
        Case 2: GetDigit = "dos"
        Case 3: GetDigit = "tres"
        Case 4: GetDigit = "cuatro"
        Case 5: GetDigit = "cinco"
        Case 6: GetDigit = "seis"
        Case 7: GetDigit = "siete"
        Case 8: GetDigit = "ocho"
        Case 9: GetDigit = "nueve"
        Case Else: GetDigit = ""
    End Select
End Function

3. Guarda y cierra el editor

  • Guarda los cambios y cierra el Editor de Visual Basic.

4. Usa la fórmula en una celda

  • Escribe en una celda: =NumLetras(A1) Reemplaza A1 por la celda que contiene el número que quieres convertir.

🎯 Recomendaciones

  • Guarda tu archivo como Libro habilitado para macros (.xlsm).
  • Asegúrate de que las macros estén habilitadas en Excel para que la función funcione correctamente.
  • Puedes personalizar el código si deseas agregar palabras como “pesos”, “centavos”, o cambiar el idioma.

📢 Si este artículo te fue útil, apóyame dando clic en los anuncios. Con tu ayuda puedo seguir creando y compartiendo contenido de valor. ¡Gracias!


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *