Función de Excel Importe en números a Importe en letra

Publicado por Raul Rojas el Dic 10, 2008 en General, Trucos |

Aquí una función para Excel para que puedan convertir importes en numero a importe en letra. No tomo ningún crédito porque me la encontré en internet pero nunca supe quien la diseño. Así que créditos a quien corresponda.

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 = 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")
laDecenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA")
laCentenas = Array("CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "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
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 = 0 And 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
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

Comparte este articulo
[Ask] [del.icio.us] [Digg] [Facebook] [Google] [LinkedIn] [MySpace] [Rojo] [Squidoo] [Technorati] [Twitter] [Windows Live] [Yahoo!] [Email]

Etiquetas:,

4 Comments


[...] Funcion de Excel para convertir importe en numeros a importe en letrabitacora.asesorensistemas.com/2008/12/funcin-de-excel-import… por ruletero hace pocos segundos [...]


 
afperea
Ene 4, 2009 at 1:26 AM

mmmm no entendi para qeu sirve esto :P


 
Raul Rojas
Ene 4, 2009 at 1:40 AM

Ej: SI diseñas un formato para facturas y necesitas convertir el importe total que esta en numero y ponerlo en letras Esta funcion te hace el trabajo por ti. Copias todo el codigo y luego en Excel presionas Alt+F11 para que se abra el editor de VIsual Basic. Lo pegas y lo guardas. Lo invocas en una celda mediante la funcion =PesosMN(A1) <—– A1 hace referencia a la celda que tiene el importe en numeros.


 
Anónimo
Sep 30, 2009 at 11:21 PM

cual es el procedimiento para invocarlo en la hoja de excel


 

Reply

Copyright © 2010 Bitácora de un Asesor Raul Rojas All rights reserved. Theme by Laptop Geek.