ConvertirNumeroALetras

Anuncio
Convertir números a letras:
Obtenido desde: http://gchable.wordpress.com/2007/10/14/4/
Una de las funciones de Microsoft Excel más buscadas en la red y en los foros, es como convertir
un numero a texto o numero a letras, esta función no viene integrada en las formulas propias de
Microsoft Excel, esto lo podemos hacer insertando un código llamado “Macro”, que no son mas
que instrucciones que nos ayudan a automatizar tareas en Excel (también se usa en Word,
Access etc.).
En la red se puede encontrar muchos de estos “codigos”, algunos permiten manejar varias
monedas, dólares, Euros etc. Uno de los más usados y mas que excelente es el de Mauricio
Baeza, ¡100% hecho en México!, seguramente ya lo haz usado, desde entonces han surgido
muchas variantes y modificaciones; pero muy pocos sitios o casi nunguno muestran como
usarlos.
Desde que uso Microsoft Excel he probado varios de esos códigos, he visto como mucha gente
se atribuye la autoría de dichos códigos, que vergüenza pero en fin. Dentro de las diferencias
que he encontrado en la conversión a texto es algo así como esto:
23
=
Veintitrés
23 = Veinte y tres
Yo me inclinaría mas por el primero, No es que la segunda conversión este mal, cualquiera de
las dos formas son correctas, pongamos un ejemplo, cuando voy a la tienda de la esquina y
pregunto ¿Cuándo cuesta este palitroche*? El anciano muy amablemente me dice “son veintitrés
pesos joven.
Vamos a empezar, primero necesitamos el código, vamos a usar este que al parecer el autor es
Saúl López con una pequeña modificación de ByPaco² para que aparezca Pesos y M.N., yo le hice
una pequeña modificación al código para que aparezca “SON:” como se usa aquí en México.
Function PesosMN(tyCantidad As Currency) As String
Dim lyCantidad As Currency, lyCentavos 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
tyCantidad = Round(tyCantidad, 2)
lyCantidad = Int(tyCantidad)
lyCentavos = (tyCantidad - lyCantidad) * 100
laUnidades
"SIETE",
=
Array("UN",
"OCHO",
"NUEVE",
"DOS",
"TRES",
"CUATRO",
"DIEZ",
"ONCE",
"DOCE",
"CINCO",
"TRECE",
"SEIS",
"CATORCE",
"QUINCE", "DIECISEIS", "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
=
"CUATROCIENTOS",
Array("CIENTO",
"QUINIENTOS",
"OCHOCIENTOS", "NOVECIENTOS")
lnNumeroBloques = 1
Do
lnPrimerDigito = 0
lnSegundoDigito = 0
lnTercerDigito = 0
lcBloque = ""
lnBloqueCero = 0
For I = 1 To 3
lnDigito = lyCantidad Mod 10
If lnDigito <> 0 Then
Select Case I
Case 1
"DOSCIENTOS",
"TRESCIENTOS",
"SEISCIENTOS",
"SETECIENTOS",
lcBloque = " " & laUnidades(lnDigito - 1)
lnPrimerDigito = lnDigito
Case 2
If lnDigito <= 2 Then
lcBloque = " " & laUnidades((lnDigito * 10) + lnPrimerDigito - 1)
Else
lcBloque = " " & laDecenas(lnDigito - 1) & IIf(lnPrimerDigito <> 0, " Y",
Null) & lcBloque
End If
lnSegundoDigito = lnDigito
Case 3
lcBloque
=
"
"
&
IIf(lnDigito
=
1
And
lnPrimerDigito
=
lnSegundoDigito = 0, "CIEN", laCentenas(lnDigito - 1)) & lcBloque
lnTercerDigito = lnDigito
End Select
Else
lnBloqueCero = lnBloqueCero + 1
End If
lyCantidad = Int(lyCantidad / 10)
If lyCantidad = 0 Then
Exit For
End If
Next I
Select Case lnNumeroBloques
Case 1
PesosMN = lcBloque
Case 2
PesosMN = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & PesosMN
Case 3
0
And
PesosMN = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And
lnTercerDigito = 0, " MILLON", " MILLONES") & PesosMN
End Select
lnNumeroBloques = lnNumeroBloques + 1
Loop Until lyCantidad = 0
PesosMN = "SON: (" & PesosMN & IIf(tyCantidad > 1, " PESOS ", " PESO ") &
Format(Str(lyCentavos), "00") & "/100 M.N.)"
End Function
Bien, ahora que ya tenemos el código vamos a insertarlo en nuestra hoja de trabajo de Microsoft
Excel. Recomendable trabajar en un libro nuevo.
Hacemos clic en Herramientas->Macros->Editor de Visual Basic, o simplemente presionando
Alt+F11
Es importante que cierres todos los libros que tengas abierto y dejes abierto solo el libro en el
que estas trabajando ya que podría dificultarte encontrar tu libro en el explorador de proyectos
(lado izquierdo de tu pantalla, si no lo ves presiona Ctrl+R)
Una vez abierto el editor de Visual Basic nos vamos a Insertar->Modulo
En la ventana que se abre pegamos el codigo de la macro
Listo, ya tenemos nuestro macro listo para trabajar, cerramos el editor de Visual Basic, lo
puedes hacer con Alt+Q y regresamos a Microsoft Excel
Vamos a probarlo, en la celda A1 ponemos un importe, yo pondré 1500.21, abajo, en la celda A2
ponemos =PesosMN(A1)
Bien, si pudiste hacer el ejercio hasta aquí, ya puedes ponerlo en todos tus libros de trabajo,
buena suerte.
*Se acuerdan de aquellos años de primaria cuando una niña inventó esta nueva palabra, creo
que la niña se llamaba Pita.
**************************************************************
Edición 25 de Marzo de 2011.
Pongo a su disposición un libro de Excel ya con la macro listo para usar:
http://www.megaupload.com/?d=3XGSSVT2
http://rapidshare.com/files/454363213/Numeros_a_letras.xls
Si usan Excel 2007 no olviden habilitar las macros.
**************************************************************
Descargar