NumLetras: Función para pasar (convertir) números a letras

Convertir numeros a letras en excel

Te mostramos como crear tu propia función para convertir números a letras, esto puede serte de mucha utilidad si usas Excel para imprimir facturas o reportes en los que debas ingresar un número en letras.

Muestra un ejemplo de como pasar o convertir números a letras mediante una funcion propia en Excel
Ejemplo de convertir numeros a letras en Excel.

NOTA: Puedes saltarte todos estos pasos e ir directo a descargar la hoja de Excel con una macro para convertir los números a letras, si lo deseas. Si quieres que esta función esté siempre disponible en tu Excel, puedes descargar e instalar este complemento gratis

Primero ingresa a VBA presionando las teclas Alt+F11, e inserta un Módulo (Si ya tienes un módulo no necesitas insertar uno nuevo)

Insertar un modulo de codigo en VBA, para convertir numeros a letras en Excel
Crear una módulo VBA

Ahora selecciona tú módulo (Module1)

Ventana de codigo para agregar la funcion
Ejemplo de macros – vba

Y en la ventana derecha ingresa este texto:

Function NumLetras(Valor As Currency, Optional MonedaSingular As String = "", Optional MonedaPlural As String = "") As String
Dim Cantidad As Currency, Centavos As Currency, Digito As Byte, PrimerDigito As Byte, SegundoDigito As Byte, TercerDigito As Byte, Bloque As String, NumeroBloques As Byte, BloqueCero
Dim Unidades As Variant, Decenas As Variant, Centenas As Variant, I As Variant 'Si esta como Option Explicit
Dim ValorEntero As Long
Dim ValorOriginal As Double
    Valor = Round(Valor, 2)
    Cantidad = Int(Valor)
    ValorEntero = Cantidad
    Centavos = (Valor - Cantidad) * 100
    Unidades = Array("UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE", "VEINTE", "VEINTIUN", "VEINTIDOS", "VEINTITRES", "VEINTICUATRO", "VEINTICINCO", "VEINTISEIS", "VEINTISIETE", "VEINTIOCHO", "VEINTINUEVE")
    Decenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA")
    Centenas = Array("CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS")
    NumeroBloques = 1
    
    Do
        PrimerDigito = 0
        SegundoDigito = 0
        TercerDigito = 0
        Bloque = ""
        BloqueCero = 0
        For I = 1 To 3
            Digito = Cantidad Mod 10
            If Digito <> 0 Then
                Select Case I
                Case 1
                    Bloque = " " & Unidades(Digito - 1)
                    PrimerDigito = Digito
                Case 2
                    If Digito <= 2 Then
                        Bloque = " " & Unidades((Digito * 10) + PrimerDigito - 1)
                    Else
                        Bloque = " " & Decenas(Digito - 1) & IIf(PrimerDigito <> 0, " Y", Null) & Bloque
                    End If
                    SegundoDigito = Digito
                Case 3
                    Bloque = " " & IIf(Digito = 1 And PrimerDigito = 0 And SegundoDigito = 0, "CIEN", Centenas(Digito - 1)) & Bloque
                    TercerDigito = Digito
                End Select
            Else
                BloqueCero = BloqueCero + 1
            End If
            Cantidad = Int(Cantidad / 10)
            If Cantidad = 0 Then
                Exit For
            End If
        Next I
        Select Case NumeroBloques
            Case 1
                NumLetras = Bloque
            Case 2
                NumLetras = Bloque & IIf(BloqueCero = 3, Null, " MIL") & NumLetras
            Case 3
                NumLetras = Bloque & IIf(PrimerDigito = 1 And SegundoDigito = 0 And TercerDigito = 0, " MILLON", " MILLONES") & NumLetras
        End Select
        NumeroBloques = NumeroBloques + 1
    Loop Until Cantidad = 0
    
    'Millardos
    If Valor >= 1000000000 Then
        Dim millardos As Currency
        Dim millarodsInt As Integer
        Dim letras_Millardos As String
        millarodsInt = Int(Valor / 1000000000)
        millardos = millarodsInt
        
        letras_Millardos = Replace(Trim(NumLetras(millardos)), "00/100", IIf(millarodsInt = 1, "MILLARDO", "MILLARDOS"))
        NumLetras = letras_Millardos & NumLetras
    End If
    
    NumLetras = Trim(NumLetras) & " " & Format(Str(Centavos), "00") & "/100 " & IIf(ValorEntero = 1, MonedaSingular, MonedaPlural)
End Function

Y guarda los cambios presionando Ctrl+S o con el botón de Guardar en la barra de herramientas.

Nota: Si tienes algún problema hasta ahora puedes consultar este artículo, que explica con mayor detalle cómo crear una función propia.

Como usar la función para convertir los números a letras.

Puedes usar esta función como cualquier otra ingresando =NumLetras(A7,»Dolar»,»Dolares») en tu hoja de cálculo donde:

  1. A7 es una cantidad en números o celda que contiene un número
  2. «Dolar» es opcional y se usa para poner el nombre de la moneda en el texto convertido, puedes usar otras monedas como Peso, Lempira, etc.
  3. «Dólares», es también opcional y se usa para mostrar la moneda en plural, puedes dejarlo en blanco o ingresar otra moneda como Pesos, Lempiras, etc.

Si tuviste algún problema o quieres ver una demostración puedes bajar esta Hoja de cálculo con la función ya creada. Si lo que deseas es que esta función esté siempre disponible puedes descargar e instalar este complemento de excel. Si tienes problemas para instalarlo consulta el artículo para instalar complementos en Excel 2007 o 2010.

Esta es una muestra de todo lo que puedes hacer usando macros, el cielo es el límite, pero si aún no conoces mucho sobre macros o VBA, entonces este libro es perfecto para ti. Al final del año (2020) voy a publicar la segunda edición, que contendrá más de 100 macros de ejemplos. Todos los que compren esta primera edición, tendrán acceso a la segunda edición, por que simplemente voy a enviarlo como una actualización de libro, disponible para todas las compras previas.