|
Escrito por
Andres Real Alvarez
el 05/01/2007
HOLA A TODOS HERMANOS MIOS QUE DIOS LOS PROTEGA SIEMPRE Y LOS CUIDE HERRAMIENTAS,MACRO,EDITOR DE VB,CREAS UN MODULO Y PEGAS EL CODIGO A SI DE FACIL.
Function CantidadEnLetra(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 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 CantidadEnLetra = lcBloque Case 2 CantidadEnLetra = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & CantidadEnLetra Case 3 CantidadEnLetra = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTercerDigito = 0, " MILLON", " MILLONES") & CantidadEnLetra End Select lnNumeroBloques = lnNumeroBloques + 1 Loop Until lyCantidad = 0 CantidadEnLetra = "(" & CantidadEnLetra & IIf(tyCantidad > 1, " PESOS ", " PESO ") & Format(Str(lyCentavos), "00") & "/100 M.N. )" End Function
|
||
|
Citar |
Ver mensaje
|
|
Escrito por
Profesor
el 09/01/2007
Agradecido por la solución. Dios te bendiga |
|
Escrito por
Francisco
el 18/01/2007
Se puede hacer la misma formula pero que no emita las centecimas ni el /nm o mn al final
|
|
Escrito por
Pablo
el 22/01/2007
Gracias em ayudo muchisimo tu formula dios te Bendiga hermano.
|
|
|
Escrito por
Eduardo Morales
el 19/06/2007
Muchas gracias por tu generosidad!
|
|
|
Escrito por
Cesar Robles
el 30/10/2007
Acabo de probar tu macro y funciona excelente. Enhorabuena por este gesto. Saludos. |
|
Escrito por
Profesor
el 31/10/2007
Me alegro profundamente que te haya servido. Saludos |
|
|
Escrito por
Araly
el 24/04/2008
Hola! Oye he tratado muchas veces de hacerla la copio, y cuando escribo la formula me aparece # ¿NOMBRE? Me puedes aydar en que me estoy equivocando La formula la escribo =CANTIDADENLETRAS(H41) Te agradeceria que me pudieras ayudar. Muchas Gracias. |
|
Escrito por
Andres Real Alvarez
el 24/04/2008
PARA EMPEZAR NECESITAS EL SIGUIENTE CODIGO Function CantidadEnLetra(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 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 CantidadEnLetra = lcBloque Case 2 CantidadEnLetra = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & CantidadEnLetra Case 3 CantidadEnLetra = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTercerDigito = 0, " MILLON", " MILLONES") & CantidadEnLetra End Select lnNumeroBloques = lnNumeroBloques + 1 Loop Until lyCantidad = 0 CantidadEnLetra = "(" & CantidadEnLetra & IIf(tyCantidad > 1, " PESOS ", " PESO ") & Format(Str(lyCentavos), "00") & "/100 M.N. )" End Function |
|
Escrito por
Francisco Ballesteros Atondo
el 8 de Agosto
Te felicito, en verdad, es un aporte a la comunidad. |
|
|
Escrito por
Alejandro
el 14 de Octubre
Excelente la formula, gracias por el aporte. |
|
|
Escrito por
Ivonne Perez Zamudio
ayer a las 21:02
Hola mi nombre es ivonne soy de michoacan méxico muchas gracias la verdad me servira de mucho unicamente q me le tuve q cambiar algo pues me marcaba error en esta parte 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 y lo que hice fue porner la apertura de paretesis 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 eso me ayudo ahora no se si me podrias ayudar en otra cosa, pongo una formula por ejmplo de suma de dos celdas y si la hace pero al cambiar los datos de las celdas no me cambia el total de la suma me deja el total de los datos anteriores me podrias ayudar te lo agradecere mucho atte ivonne pz
|
|
Escrito por
Armando Montes
ayer a las 23:33
Ivonne, esto puede servirte: |
|
Al escribir en el debate:
|