Pasar una cantidad en número a cantidad en letra con Excel

Antes de continuar con este post, debo aclarar que el código que utilizo no ha sido desarrollado por mi, lo encontré aquí y le hice algunos ajustes para generar los resultados como a mi me interesaban.
En mi trabajo elaboramos cheques constantemente y resulta tedioso y poco productivo capturar las cantidades en letra, por lo que me puse a buscar y di con este código:

Function Nlet(Number As Double, Optional Kurrencys As String, Optional Kurrency As String) As String
If Kurrencys = "" Then
Kurrencys = "PESOS"
Kurrency = "PESO"
End If
If Kurrency = "" Then Kurrency = Kurrencys
Const MinNum = 0#
Const MaxNum = 4294967295.99
Dim Result As String
If (Number >= MinNum) And (Number <= MaxNum) Then
Dim Kurrenzy As String
Kurrenzy = Kurrency
If Number >= 2 Then Kurrenzy = Kurrencys
If Number = 0 Then Kurrenzy = Kurrencys
If Number < 1 Then Kurrenzy = Kurrencys
Result = RecurseNumber((Fix(Number)))
If Round((Number - Fix(Number)) * 100) < 10 Then
Result = "(" + Result + " " + Kurrenzy + " 0" + Mid(Str(Round((Number - Fix(Number)) * 100)), 2, 1) + "/100 M.N.)"
Else
Result = "(" + Result + " " + Kurrenzy + " " + Mid(Str(Round((Number - Fix(Number)) * 100)), 2, 2) + "/100 M.N.)"
End If
Else
Result = "Error, verifique la cantidad."
End If
Nlet = Result
End Function
Function RecurseNumber(N As Long) As String
Dim Numbers, Tenths, Hundrens
Numbers = Array("CERO", "UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISÉIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE", "VEINTE", _
"VEINTIÚN", "VEINTIDÓS", "VEINTITRÉS", "VEINTICUATRO", "VEINTICINCO", "VEINTISÉIS", "VEINTISIETE", "VEINTIOCHO", "VEINTINUEVE")
Tenths = Array("CERO", "DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA", "CIEN")
Hundrens = Array("CERO", "CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS")
Dim Result As String
Select Case N
Case 0
Result = "CERO"
Case 1 To 29
Result = Numbers(N)
Case 30 To 100
Result = Tenths(N \ 10) + IIf(N Mod 10 <> 0, " Y " + RecurseNumber(N Mod 10), "")
Case 101 To 999
Result = Hundrens(N \ 100) + IIf(N Mod 100 <> 0, " " + RecurseNumber(N Mod 100), "")
Case 1000 To 999999
Result = RecurseNumber(N \ 1000) + " MIL" + IIf(N Mod 1000 <> 0, " " + RecurseNumber(N Mod 1000), "")
Case 1000000 To 1999999
Result = RecurseNumber(N \ 1000000) + " MILLÓN" + IIf(N Mod 1000000 <> 0, " " + RecurseNumber(N Mod 1000000), " DE")
Case 2000000 To 999999999
Result = RecurseNumber(N \ 1000000) + " MILLONES" + IIf(N Mod 1000000 <> 0, " " + RecurseNumber(N Mod 1000000), " DE")
Case 1000000000 To 1999999999
Result = RecurseNumber(N \ 1000000000) + " MIL MILLONES" + IIf(N Mod 1000000000 <> 0, " " + RecurseNumber(N Mod 1000000000), " DE")
Case 2000000000 To 4294967295.99
Result = RecurseNumber(N \ 1000000000) + " BILLONES" + IIf(N Mod 1000000000 <> 0, " " + RecurseNumber(N Mod 1000000000), " DE")
End Select
RecurseNumber = Result
End Function
Sub Nl()
End Sub

El cual lo usaremos en Excel de la siguiente manera:

Creamos un archivo nuevo en Excel y al guardarlo lo hacemos con la opción de habilitado para macros:

Abrimos el editor de Visual Basic (Alt+F11) :

Insertamos un nuevo módulo, hacemos doble clic en el modulo creado y pegamos el código:

Guardamos, cerramos el editor y volvemos a la hoja de excel; introducimos una cantidad en cualquier celda e insertamos una función:

En el cuadro emergente seleccionamos la opción definidas por el usuario:

Hacemos doble clic en Nlet:

Nos preguntará la ubicación de la cantidad que nos interesa; la seleccionamos y aceptamos:

Podemos ver que el código como lo encontré, me genera un SON: PESO, aparte de un espacio en blanco cuando hay 0 (cero) pesos. También vemos que las cantidades entre cero y un peso (como la de 0.87) nos genera SON: (PESO 87/100 M.N.).

Al agregar lo siguiente (lo que está en cursiva):

If Number = 0 Then Kurrenzy = Kurrencys

If Number < 1 Then Kurrenzy = Kurrencys

Y
 
 Result = "CERO"

Tenemos que, cuando tengamos cantidades como 0.59, nos genere (CERO PESOS 59/100 M.N.) sin anteponernos el SON:

 


Cabe mencionar que no funciona con números negativos. Espero les sirva,  : )

fuente / Convertir números a texto (letras) en Excel

 

Anuncios

Etiquetas: , , ,

About Javiereyes

Fotógrafo de bodas y quince años.

2 responses to “Pasar una cantidad en número a cantidad en letra con Excel”

  1. Reina says :

    Mil gracias !!!! fue de forma extraordinaria tu ayuda resumida, clara y exactamente lo que yo necesitaba. Bye

  2. IVAN says :

    EXCELENTE APORTE

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: