Curso Excel VBA y Macros – Cap. 36 – Función para convertir números a letras

<<CURSO COMPLETO EN YOUTUBE>>

En este tutorial veremos cómo modificar una de las funciones más solicitadas en Excel, Cómo convertir números a letras en Excel. Tomaremos la función llamada cMoneda que desarrolló mi amigo Otto Javier González del canal Excel y más.

Dicha función nos solicita el argumento del número que deseamos convertir. La mejora que le haremos a la función será añadirle más parámetros que nos ayudarán a elegir el tipo de moneda y la manera en que podemos mostrar los centavos.

Ver video Capítulo 36 Excel VBA & Macros

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Funciones UDF en Excel

Las funciones personalizadas o UDF (User-defined functions por sus siglas en inglés) son procedimientos que pueden usarse en celdas, formato condicional o ser llamadas desde otros procedimientos, incluso en Formularios.

Función cMoneda para Convertir números a letras en Excel.

La función cMoneda tiene sólo un argumento, Num, o el número que deseamos convertir a letra. Si usamos la función en una celda, obtendremos el siguiente resultado:

95.43 = Noventa y Cinco Dólares Con Cuarenta y Tres Centavos

Función cMoneda2, mejorada

Modificaremos la función cMoneda y la convertiremos en cMoneda2, la cual tendrá 5 parámetros que la convertirán en una función flexible y compatible con casi cualquier tipo de moneda y país.

Argumentos cMoneda2

Argumento

Descripción

Num

El número que se desea convertir a texto.

TipoCambio1

El tipo de moneda en singular. PESO

TipoCambio2

El tipo de moneda en plural. PESOS

Centavos

Opcional. Devuelve el valor de centavos en texto o número. Ejemplo 10.80: 0 = 88/100, 1 = Ochenta y ocho centavos

Denominación

Opcional. En caso de querer mostrar el valor de M.N. (moneda nacional) u otro según el país.

Ejemplo 1

[B4] = cMoneda2(A4,”PESO”,”PESOS”,1,”M.N.”)

95.43 = NOVENTA Y CINCO PESOS CON CUARENTA Y TRES CENTAVOS M.N.

Ejemplo 2

[B5] = cMoneda2(A5,”PESO”,”PESOS”,0,”M.N.”)

95.43 = NOVENTA Y CINCO PESOS 43/100 M.N.

Ejemplo 3

[B6] = =cMoneda2(A6,”PESO”,”PESOS”,1)

95.43 = NOVENTA Y CINCO PESOS CON CUARENTA Y TRES CENTAVOS

Código VBA de la función

El siguiente código deberá ir en un módulo normal.

'========================================================================
' Función: Convertir números a letras
'
' Creado por Otto Javier González
' www.youtube.com/ottojaviergonzalez
' Finalizado el 4 de Julio de 2013
'
' Visual Basic Para Microsoft Excel 2013
' Lista de reproducción del curso en YouTube:
' http://www.youtube.com/playlist?list=PLFNWPvtjBMjtnYLCp8KJwD1Ref7WLCIVZ
'
' Modificada por: Sergio Alejandro Campos, MVP Excel (18-jul-2019)
' Canal de Youtube EXCELeINFO, curso de macros:
' https://www.youtube.com/playlist?list=PLu8wBtXk2ly6-0LtqcC2aj4g6cEnJ-_nN
'========================================================================

Option Explicit

Function cMoneda2(num As Double, TipoCambio1 As String, TipoCambio2 As String, Optional Centavos As Byte, Optional Denominacion As String) As String
Dim nEntero As Long
Dim nDecimal As Double
Dim Texto As String

nEntero = Int(num)
nDecimal = Int(Round((num - nEntero) * 100)) 'Corrección de últimoo momento

Texto = cNumero(nEntero)

' Agrega la moneda
If nEntero = 1 Then
    Texto = Texto + " " + TipoCambio1
    'Texto = Texto + " Dólar"
Else
    If (nEntero Mod 1000000) = 0 Then
        Texto = Texto + " De"
    End If
    Texto = Texto + " " + TipoCambio2
    'Texto = Texto + " Dólares"
End If

'Agrega los centavos
If Centavos = 1 Then
    
    If nDecimal <> 0 Then
        Texto = Texto & " Con " & cNumero(nDecimal)
        If nDecimal = 1 Then
            Texto = Texto & " Centavo"
        Else
            Texto = Texto & " Centavos"
        End If
    End If
    
ElseIf Centavos = 0 Then
    
    If nDecimal <> 0 Then
        Texto = Texto
        If nDecimal = 1 Then
            Texto = Texto & nDecimal & "/100"
        Else
            Texto = Texto & " " & nDecimal & "/100"
        End If
    End If
End If
cMoneda2 = VBA.UCase(Texto) & " " & Denominacion


End Function

Function cNumero(ByVal num As Long) As String
Dim Texto As String

Dim cUnidades, cDecenas, cCentenas
Dim nUnidades, nDecenas, nCentenas As Byte

Dim nMiles As Long
Dim nMillones As Long

cUnidades = Array("", "Un", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciseis", "Diecisite", "Dieciocho", "Diecinueve", "Veinte", "Veintiuno", "Veintidós", "Veintitrés", "Veitnicuatro", "Veinticinco", "Veintiseis", "Veintisiete", "Veintiocho", "Veintinueve")
cDecenas = Array("", "Diez", "Veinte", "Treinta", "Cuarenta", "Cincuenta", "Sesenta", "Setenta", "Ochenta", "Noventa", "Cien")
cCentenas = Array("", "Ciento", "Doscientos", "Trescientos", "Cuatrocientos", "Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos")

nMillones = num \ 1000000
nMiles = (num \ 1000) Mod 1000
nCentenas = (num \ 100) Mod 10
nDecenas = (num \ 10) Mod 10
nUnidades = num Mod 10

'Evaluación de Millones

If nMillones = 1 Then
    Texto = "Un Millón" + IIf(num Mod 1000000 <> 0, " " + cNumero(num Mod 1000000), "")
    cNumero = Texto
    Exit Function
ElseIf nMillones >= 2 And nMillones <= 999 Then
    Texto = cNumero(num \ 1000000) + " Millones" + IIf(num Mod 1000000 <> 0, " " + cNumero(num Mod 1000000), "")
    cNumero = Texto
    Exit Function
    
        
    'Evaluación de Miles
    
ElseIf nMiles = 1 Then
    Texto = "Mil" + IIf(num Mod 1000 <> 0, " " + cNumero(num Mod 1000), "")
    cNumero = Texto
    Exit Function
ElseIf nMiles >= 2 And nMiles <= 999 Then
    Texto = cNumero(num \ 1000) + " Mil" + IIf(num Mod 1000 <> 0, " " + cNumero(num Mod 1000), "")
    cNumero = Texto
    Exit Function
    
End If

'Evaluación desde 0 a 999

'Casos Especiales
If num = 100 Then
    Texto = cDecenas(10)
    cNumero = Texto
    Exit Function
ElseIf num = 0 Then
    Texto = "Cero"
    cNumero = Texto
    Exit Function
End If


If nCentenas <> 0 Then
    Texto = cCentenas(nCentenas)
End If

If nDecenas <> 0 Then
    If nDecenas = 1 Or nDecenas = 2 Then
        If nCentenas <> 0 Then
            Texto = Texto + " "
        End If
        Texto = Texto + cUnidades(num Mod 100)
        cNumero = Texto
        Exit Function
    Else
        
        If nCentenas <> 0 Then
            Texto = Texto + " "
        End If
        
        Texto = Texto + cDecenas(nDecenas)
    End If
End If


If nUnidades <> 0 Then
    If nDecenas <> 0 Then
        Texto = Texto + " y "
    ElseIf nCentenas <> 0 Then
        Texto = Texto + " "
    End If
    Texto = Texto + cUnidades(nUnidades)
End If

cNumero = Texto

End Function

Descarga el archivo de ejemplo

036 – Función UDF Convertir números a letras – EXCELeINFO.zip

<<CURSO COMPLETO EN YOUTUBE>>

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *