Macro Función "Números a Letras"

Macro Función "Números (3 dígitos) a Letras"

Explicación:

  • Tenemos que poder transformar un número de tres dígitos de formato numérico a texto por ejemplo 321 convertirlo a ‘Trescientos Veintiuno’ y con cualquier otro número que tenga 3 cifras, este número vendrá de 3 dígitos del documento de identidad del usuario estos 3 dígitos serán al azar,
  • Puedes usar esta función como cualquier otra ingresando =NumLetras(A7) en tu hoja de cálculo donde ‘A7’ es una cantidad en números o celda que contenga el número que queramos transformar en Texto
Primero la macro crea las variables necesarias para poder separar el número en centenas decenas y unidades para luego poder imprimirlas o enviarlas como respuesta
Dim lyCantidad As Currency, lnDigito As Byte, lnPrimerDigito As Byte, lnSegundoDigito As Byte, lnTercerDigito As Byte, lcBloque As String, lnNumeroBloques As Byte, lnBloqueCero
Dim laUnidades As Variant, laDecenas As Variant, laCentenas As Variant, I As Variant 'Si esta como Option Explicit
Dim ValorEntero As Long
Valor = Round(Valor, 2)
lyCantidad = Int(Valor)
ValorEntero = lyCantidad
para ello podemos usar arreglos que contengan las unidades, decenas y centenas
laUnidades = Array("UNO", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISÉIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE", "VEINTE", "VEINTIUN", "VEINTIDOS", "VEINTITRES", "VEINTICUATRO", "VEINTICINCO", "VEINTISEIS", "VEINTISIETE", "VEINTIOCHO", "VEINTINUEVE")
laDecenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA")
laCentenas = Array("CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS")
Primero Realiza un ciclo que siempre reiniciará las siguientes variables:
lnPrimerDigito = 0
lnSegundoDigito = 0
lnTercerDigito = 0
lcBloque = ""
lnBloqueCero = 0
Se comienza un nuevo ciclo i realizando 3 repeticiones
For I = 1 To 3
Se define un dígito base que será equivalente a el resto de la division del valor entre 10
lnDigito = lyCantidad Mod 10
luego preguntar sí esa diferencia es de 0
If lnDigito <> 0 Then
Luego pregunta en un caso de que el valor -1 dividido entre 10 sea exacto y declarar un valor al bloque
Select Case I
Case 1
lcBloque = " " & laUnidades(lnDigito - 1)
lnPrimerDigito = lnDigito
Luego pregunta en un caso de que el valor -2 dividido entre 10 sea exacto y declarar un valor al bloque
Case 2
If lnDigito <= 2 Then
lcBloque = " " & laUnidades((lnDigito * 10) + lnPrimerDigito - 1)
Si no se cumple la condición anterior declarar un valor al bloque y darle un valor al segundo digito
Else
lcBloque = " " & laDecenas(lnDigito - 1) & IIf(lnPrimerDigito <> 0, " Y", Null) & lcBloque
End If
lnSegundoDigito = lnDigito
Luego pregunta en un siguiente caso darle un valor al bloque de centenares y declarar el tercer dígito
Case 3
lcBloque = " " & IIf(lnDigito = 1 And lnPrimerDigito = 0 And lnSegundoDigito = 0, "CIEN", laCentenas(lnDigito - 1)) & lcBloque
lnTercerDigito = lnDigito
End Select
Si no, se cuenta un nuevo bloque y se llevaría este registro
Else
lnBloqueCero = lnBloqueCero + 1
End If
Luego en la cantidad se pone esta entre 10
lyCantidad = Int(lyCantidad / 10)
If lyCantidad = 0 Then
Exit For
End If
Luego se pregunta al programa sí se cumplen los siguientes casos
Next I
Select Case lnNumeroBloques
En el primer caso pregunta sí el numero de letras es igual a el bloque final
Case 1
NumLetras = lcBloque
Sí el número de letras es igual a el bloque final, y sí hay 3 bloques en 0
Case 2
NumLetras = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & NumLetras
Sí el número de letras es igual a que el primer digito sea 1 y los siguientes dos digitos sean cero marcar miles
Case 3
NumLetras = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTercerDigito = 0, " MILLON", " MILLONES") & NumLetras
End Select
Luego empieza a armar el texto según la información anterior
lnNumeroBloques = lnNumeroBloques + 1
Loop Until lyCantidad = 0
NumLetras = NumLetras & " " & IIf(ValorEntero = 1, MonedaSingular, MonedaPlural)
Termina la función
End Function

En la siguiente imagen se observará un ejemplo similar al explicado anteriormente:

Bibliografia para obtener la macro :
  • Luiz Cruz,2012,Cómo convertir números a letras en Excel usando macros,En el enlace se descargó la macro de tipo función, pero se hizo un cambio para que solo reciba el número o celda que contiene el número, recuperado de :
    https://excel.facilparami.com/2012/06/numletras-funcion-para-pasar-numeros-letras/
  • Luiz Cruz, 2013, NumLetras: Función para pasar (convertir) números a letras según tu pais - Excel Fácil para mi, se obtuvo información de cómo funciona la macro, Recuperado de : https://excel.facilparami.com/2013/10/numletras-funcion-para-pasar-convertir-numeros-a-letras-segun-tu-pais/
  •  Gregorio Mareco Benitez, 2014 ,NumLetras. Función para convertir Numeros a su equivalente en Letras | Gregorio Mareco Benitez , se obtuvo información de cómo funciona la macro, Recuperado de: http://gregoriom.blogspot.com/2014/08/numletras-funcion-para-convertir.html


Comentarios