Numeros a Letras

2
Function QuetzalesMN(tyCantidad As Currency) As String Dim lyCantidad As Currency, lyCentavos As Currency, lnDigito As Byte, lnPrimerDi gito As Byte, lnSegundoDigito As Byte, lnTercerDigito As Byte, lcBloque As Strin g, lnNumeroBloques As Byte, lnBloqueCero Dim laUnidades As Variant, laDecenas As Variant, laCentenas As Variant, I As Var iant '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", "OCH O", "NUEVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE", "VEINTE", "VEINTIUN", "VEINTIDOS", "VEI NTITRES", "VEINTICUATRO", "VEINTICINCO", "VEINTISEIS", "VEINTISIETE", "VEINTIOCH O", "VEINTINUEVE") laDecenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA ", "SETENTA", "OCHENTA", "NOVENTA") laCentenas = Array("CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUIN IENTOS", "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 QuetzalesMN = lcBloque Case 2 QuetzalesMN = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & QuetzalesMN Case 3 QuetzalesMN = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTe

description

Documento de texto que se usa para combertir numeros a letras en excel, este documento no lleva la cantidad en centavos y debe de crearse un macro en excel para que pueda hacer la converción.

Transcript of Numeros a Letras

Page 1: Numeros a Letras

Function QuetzalesMN(tyCantidad As Currency) As StringDim lyCantidad As Currency, lyCentavos As Currency, lnDigito As Byte, lnPrimerDigito As Byte, lnSegundoDigito As Byte, lnTercerDigito As Byte, lcBloque As String, lnNumeroBloques As Byte, lnBloqueCeroDim laUnidades As Variant, laDecenas As Variant, laCentenas As Variant, I As Variant 'Si esta como Option ExplicittyCantidad = Round(tyCantidad, 2)lyCantidad = Int(tyCantidad)lyCentavos = (tyCantidad - lyCantidad) * 100laUnidades = 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 = 1DolnPrimerDigito = 0lnSegundoDigito = 0lnTercerDigito = 0lcBloque = ""lnBloqueCero = 0For I = 1 To 3lnDigito = lyCantidad Mod 10If lnDigito <> 0 ThenSelect Case ICase 1lcBloque = " " & laUnidades(lnDigito - 1)lnPrimerDigito = lnDigitoCase 2If lnDigito <= 2 ThenlcBloque = " " & laUnidades((lnDigito * 10) + lnPrimerDigito - 1)ElselcBloque = " " & laDecenas(lnDigito - 1) & IIf(lnPrimerDigito <> 0, " Y", Null) & lcBloqueEnd IflnSegundoDigito = lnDigitoCase 3lcBloque = " " & IIf(lnDigito = 1 And lnPrimerDigito = 0 And lnSegundoDigito = 0, "CIEN", laCentenas(lnDigito - 1)) & lcBloquelnTercerDigito = lnDigitoEnd SelectElselnBloqueCero = lnBloqueCero + 1End IflyCantidad = Int(lyCantidad / 10)If lyCantidad = 0 ThenExit ForEnd IfNext ISelect Case lnNumeroBloquesCase 1QuetzalesMN = lcBloqueCase 2QuetzalesMN = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & QuetzalesMNCase 3QuetzalesMN = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTe

Page 2: Numeros a Letras

rcerDigito = 0, " MILLON", " MILLONES") & QuetzalesMNEnd SelectlnNumeroBloques = lnNumeroBloques + 1Loop Until lyCantidad = 0QuetzalesMN = " " & QuetzalesMN & IIf(tyCantidad > 1, " QUETZALES ", " QUETZALES ") & Format(Str(lyCentavos), " ") & "M/CTE."End Function