Saltar al contenido

UDF para leer cantidades en letras (solo parte entera) hasta cuatrillón


neverdelimon1

Recommended Posts

Hola

Veo, que estamos con nueva imagen, creo que le va bien al foro, aunque como todo tendremos que acostumbrarnos y sobre todo usar las nuevas herramientas que nuestro buen amigo proper nos ha facilitado.

Recientemente me vi en la necesidad de usar una UDF para pasar cantidades de numeros a letras, estuve buscando en la web y hay una gran variedad de soluciones, tanto para VBA, como para excel con funciones nativas, el caso es que en nungún lado vi que juntaran las posibilidades de tener a VBA y Excel (usando una que otra funcion de MS Excel) juntos (compartiendo sus objetos), quizas me falto buscar un poco más jejjejeje; la mayoria esta orientada más a VB en el caso de las UDF, entonces me anime hacer una versión, aqui les dejo el resultado (aun esta en fase de prueba, asi que mucho les agradeceria si me pudiecen comentar si detectan algun error para depurarlo, y asi funcione mejor)

La macro lee hasta 999 999 cuatrillones, 1 cuatrillón = 10^24 , tiene 3 parameros (el ultimo parametro esta pensado para poderse usar para unirla a otra macro para poder leer cantidades de moneda, aunque creo que me morire y nunca vere tal suma de dinero jejejejeje) la macro lee solo numeros cardinales

Lo malo es que ahora quede tentado ha seguirle hasta el decillón 10^60 o que tal al vigintillón 10^120 (pero quien usa eso jejejejej)

Saludos cordiales a todos, les deseo un excelente dia.

Enlace a comentario
Compartir con otras webs

Pero que buen aporte Neverdelimon1 jejeje, le he hechado un ojo pero no me da tiempo a mirarlo en profundidad, en cuanto vuelva del trabajo lo destripo bien y te comento, esta bastante trabajado :)

Un consejo, aun que lo veas una tonteria por que crees que es un numero demasiado alto, hazlo, aun que sea como reto o para quitarte la astillita de curiosidad que tienes, yo he abandonado provisionalmente algunos proyectos y luego cuando fui a retomarlos ya no tenia ningunas ganas, como por ejemplo el libro que he adjuntado en este mensaje. Ademas asi podre ver tu obra completa y quien sabe, quizas algun cientifico loco que este estudiando el comportamiento de los atomos, tenga que hacer un informe y le dara cosa escribir tanta exageracion de numeros, por lo que tenga que recurrir a tu programa :P

Yo hace un par de años, en el 2007, no recuerdo ahora el motivo pero me puse a hacerme una funcion en excel para esto mismo, pero me empezo a dar problemas y cuando se empezo a complicar la cosa abandone el proyecto por que tampoco lo necesitaba realmente. Adjunto lo mio de por aquel entonces, entonces sabia mucho menos de excel, comparado con lo tuyo es como ver aquel barquito que se cruzo delante del titanic :P:D

Buen trabajo ;)

numeros a letra.zip

Enlace a comentario
Compartir con otras webs

Hola verzulsan

Un consejo, aun que lo veas una tonteria por que crees que es un numero demasiado alto, hazlo, aun que sea como reto o para quitarte la astillita de curiosidad que tienes..."

Tienes toda la razón te agradezco mucho tu consejo, lo voy a seguir

"...comparado con lo tuyo es como ver aquel barquito que se cruzo delante del titanic..."

Bueno vi tu archivo y creo que la verdad es que no hay mucha diferencia, ya que seguimos la misma lógica para integrar los numeros, asi que creo que tu barquito en cualquier momento se hace titanic.

verzulsan te agradezco mucho tus comentarios, me motivan a seguir, gracias

Enlace a comentario
Compartir con otras webs

Hola

Adjunto codigo complementado, se puede leer hasta 999 999 vigintillones, 1 vigintillon=10^120 ,se pude utilizar para leer cantidades numericas y moneda tambien, para ello hay que ponerle el parametro de ReferirseACosas en Verdadero "True" y si se desean leer tambien los decimales, se pude enviar como parametros "con otra funcion" los decimales (en numero entero "dos digitos") y unirlos y listo, no lo agregue en la macro porque unos utilizan "coma", otros, "y","con", (/100TipoMoneda), etc (la macro utiliza la función match de MS Excel "coincidir" y otras por lo que solo trabajará en MS Excel).

Saludos

Enlace a comentario
Compartir con otras webs

uffff, tremendo tu trabajo neverdelimon1.

habrá que estudiar ese código con detenimiento.

no sé si ya has visto esta página, de Héctor Miguel Orozco, MVP excel. Tal vez te sirva de algo: officefull (Word, Excel, Calc, Writer,...) - Convertir números a su equivalente en letras

bueno, y gracias por compartir tu trabajo con nosotros., seguro será de gran valor para muchos de los que estamos aprendiendo por acá.

Enlace a comentario
Compartir con otras webs

Hola Gerson, muchas gracias, tus palabras me motivan a seguir, te agradezco tus amables comentarios.

Por otra parte, les recomiendo a los compañeros si van a utilizar el codigo (para algun proyecto o cualquier cuestion) sean cautelosos porque aun esta en fase de prueba (creo que me precipite un poco jejejeje les ofrezco mis disculpas, debi haber subido el aporte despues de un periodo de prueba prudente) y evitar cosas como esta que voy hacer, les ofrezco mis disculpas.

Actualizo el Código (por ahi se me habia pasado pasarle a los miles una funcion de limpiar ') para que diga por ejemplo cincuenta y un mil doscientos cinco) si detectan algun error o algo raro, mucho les he de agradecer me lo comenten para actualizar el codigo.

saludos..

Edito:

Ya tuve la oportunidad de probar este ultimo código, y al parecer ya es estable hice muchas pruebas aleatorias, descubri que en numeros enormes (a partir de los cuales excel maneja notacion científica) excel redondea en la celda, pero en memoria muestra el numero real 'jejejejej cosas de excel', para poder probar la macro no me quedo de otra que hacer otra macro inversa (una que pasa de numeros en letra a numero cardinal, solo asi pude hacer muchas pruebas y comparar, tratando de evitar el error humano 'de vista' en la medida de lo posible), aun asi si llegasen encontrar algun problema mucho les he de agradecer me lo hagan saber.

saludos cordiales

NumeroALetras(hasta el viguintillón)-nvr3.zip

Enlace a comentario
Compartir con otras webs

  • 3 months later...

Quiero agradecer este aporte a Neverdelimon1, felicidades, quiero un hijo tuyo, eres una sensacion

Ocupe su aporte con esta formula para generar La leyenda del monto de los cheques y esta perfecta

=CONCATENAR(" (",E17,MAYUSC(NumeroAletras(G4))," PESOS ",CONCATENAR(DERECHA(DECIMAL(G4,2),2),"/100 M.N.)"))

Solo le quite la restriccion del "un" para 1000.

Me doy cuenta de lo extraordinario que es el boton buscar

Enlace a comentario
Compartir con otras webs

Hola jicotillo

Me alegra que te haya funcionado.

Como eres de México, te envio la versión de dicha función para leer cantidades tipo moneda, en este caso usa la función EnLetraMonedaMX

En el archivo adjunto va una ejemplificacion

Cualquier sugerencia o reporte de error, es bienvenida

saludos cordiales

Catidad a letras MX-nvr.zip

Enlace a comentario
Compartir con otras webs

No pues igual esta super super chin... muy bueno jejeje.

Solo igual el comentario.

Cuando hacemos el cheque lo correcto para la leyenda de $1,000.00 pesos es: Un mil pesos

En los dos archivos esto esta restringido.

Pero bueno eso ya son la necesidades del usuario.

Mil felicidades eres mi idolo

Enlace a comentario
Compartir con otras webs

Hola jicotillo

Solo igual el comentario.

Cuando hacemos el cheque lo correcto para la leyenda de $1,000.00 pesos es: Un mil pesos

En los dos archivos esto esta restringido.

Muchas gracias por el comentario, te he de ser sincero, cuando investigue supuestamente la regla que encontre es que se lee mil pesos, sin embargo he verificado documentos "oficiales de gobierno" y en unos casos usan un mil en otros solo mil (el billete de $1000.00 solo dice mil pesos), quizás sea cuestión de costumbre en nuestro México, o haya una regla, la cual me gustaria conocer Si alguien la tiene mucho he de agradecer me la faciliten, de ante mano, para no polemizar jejejeje, y dado que las dos opciones al parecer son válidas (mientras econtramos la regla ortográfica) subo la UDF con las dos opciones, solo marca el ultimo parametro como Verdadero y listo ya leera el uno para los mil, por ejemplo 1000= un mil ;1500= un mil quinientos subo el ejemplo.

La formula se debe ingresar como en la columna C, es decir el ultimo parametro como verdadero

Catidad a letras MX-nvr-2.zip

Enlace a comentario
Compartir con otras webs

Si, igual investigare la regla, por ahora te menciono que en todos los documentos de gobierno como son Cheques, Cartas Fonacot, Creditos federales, me han pedido "a fuerzas" ponerle un mil, y bueno ya tambien me quede con la costumbre.

Ahora como dices lo importante no es polemizar, sino como le hago para ser el PLATON de este moderno " Socrates NeverdeLimon1".

Enlace a comentario
Compartir con otras webs

  • 2 months later...

Vaya Neverdelimon, al final lo conseguiste. Ya ni me acordaba de tu aportacion hasta que me ha vuelto a hacer falta y he visto que lo has mejorado como querias hasta los ^120 :D . Sobre lo de las paranoyas del excel convirtiendo numeros grandes, podrias intentar modificar el numero en la celda original cuando fuera gigante y pasarlo a texto, pero como es UDF no se puede no? o si... no se de UDF.

Muy buen trabajo, si detecto algun error te lo comento por aqui ;)

Por cierto, como esta en el post8, puedes ponerle un acceso directo al post en el primer mensaje, no he visto que se haga mucho eso aqui en ayudaexcel con esto del bvulletin pero te dejo aqui la URL con el modo de hacerlo:

post #8

Un saludo, sigue asi maquina.

Enlace a comentario
Compartir con otras webs

Hola amigo verzulsan

Me da mucho gusto saludarte, tengo una versión donde al ingresar cantidades grandes (en forma de texto, es decir formateando la celda a tipo texto, se logra subsanar el inconveniente comentado) no recuerdo si subi dicha versión pero si alguien le sirve con gusto la comparto, ahora tengo en el 'tintero' la meta de hacer la funcion que lea hasta la maxima cantidad que excel permite 9.9^307 sin embargo el inconveniente es que he andado algo falto de tiempo y no he podido encontrar cómo se leen conforme a la real academina española tales numeros, en ingles si ya logre documentarme, pero en español no he econtrado nada 'oficial' todas la enciclopedias llegan hasta 10^120, creo que mi labor sera buscar una enciclopedia especializada dónde seguramente estara la norma.

saludos cordiales

P.D. Intente responderte al privado que me enviaste pero el foro me manda a página no encontrada (creo que anda algo mal con mi cuenta de usuario), quizas ya lo solucionaste, mi propuesta es que realizaras un split con el texto de la página web.

Enlace a comentario
Compartir con otras webs

Hola Neverdelimon

Desde luego estas loco, 307 JA!, pero me gusta! :D:rolleyes: , a ver si tienes suerte y encuentras la documentacion en español. El otro archivo no estaria mal tenerlo tambien para complementar la opcion inversa de letras a numero ;)

Sobre el privado no te preocupes, ya se me ocurrieron varias formas para la lectura, aun que el split no era una de ellas, tambien me mola :).

Un saludo amigo

Enlace a comentario
Compartir con otras webs

  • 4 years later...
  • 4 weeks later...

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 96 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Si  no me he liado con los paréntesis: Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False Application.Calculation = xlManual Application.EnableEvents = False If Not Intersect(Target, Range("$L$5:$Y$9")) Is Nothing Then Range("E22") = WorksheetFunction.Sum(Range("E4:E21")) Range("E23") = WorksheetFunction.Sum(Range("E4:E19")) Range("E24") = Range("E23") - WorksheetFunction.Sum(Range("I4:I7")) Range("I22") = WorksheetFunction.Sum(Range("I4:I21")) Range("I4") = Range("E23") * 0.1 Range("I5") = Range("EN10") * Range("EN11") Range("I6") = Range("E23") * 0.0127 Range("I7") = Range("E23") * 0.006 Range("I25") = Range("E22") - Range("I22") Range("I12") = Range("E24") * 0.03 Range("C7") = Range("EQ8") - Range("EQ9") + Range("EN13") + Range("EN14") + Range("EN15") + Range("EN16") Range("C9") = Range("EQ9") + Range("EN17") + Range("EN18") + Range("EN19") Range("E7") = Range("E4") / Range("C4") * 7 / 44 * 1.5 * Range("C7") Range("E8") = Range("E4") / Range("C4") * 7 / 44 * 0.3 * Range("C8") Range("E9") = Range("E4") / Range("C4") * 7 / 44 * 1.3 * 1.5 * Range("C9") End If Application.Calculation = xlAutomatic Application.ScreenUpdating = True Application.EnableEvents = True End Sub  
    • Hola de nuevo a ambos, @daren, tu archivo lleva excesivos datos, que creo no son necesarios para la información final que buscas. Te subo otro archivo, simplificado al máximo, que, si lo he entendido bien, con esta fórmula simplificada: =CONTAR.SI('Casos de Prueba'!I:I;"OK")*('Casos de Prueba'!I1="Resultados Ciclo "&COLUMNA(A5)) se calcularía el primer dato, que se encuentra en la columna I. Copiando la fórmula a la derecha las celdas que necesites, se completaría el rango.  Tu fórmula la coloco en D7, y esta nueva en D9, que como ves (si, repito, he interpretado bien lo que buscas), da los mismos resultados. ---------------------------------------------------------------- En cuanto a: Aquí tienes, en el mismo archivo (Hoja 3) lo que devuelve tu fórmula cuando hay un determinado dato en A1 y en B2. No llego a entender qué es lo que quieres exactamente.  Tal vez con una pequeña explicación de lo que esperas obtener, sea suficiente para poner el hilo a la aguja. ? ----------------------------------------------------------------- En el caso de que falte por añadir o evaluar alguna otra variable o parámetro (en tu primer post hablabas sólo de 'OK' y ahora veo que en el archivo figuran además 'KO' y 'BLOCK'), por favor, intenta emular el ejemplo del archivo que estoy subiendo; añade EXCLUSIVAMENTE esos datos en la hoja allá donde proceda, explicando dónde o cómo deben contarse o sumarse. Mejor trabajar siempre con datos anónimos y reducidos. Desconozco si en tu archivo alguno de esos datos puede considerarse confidencial, pero seguro que no interesan a nadie. Mucho mejor obviarlos. Saludos, Plantilla V3 (B).xlsx
    • buenas noches, quisiera saber si puedo mejorar mi macros que se encuentra en el evento change de la hoja de calculo de Excel, son códigos de cálculos básicos, además si me pudieran ayudar a reducir el código o darme algún tip para reducirlo yo mismo estaría muy agradecido.  de ante mano muchas gracias     Private Sub Worksheet_Change(ByVal Target As Range)     Application.ScreenUpdating = False     Application.Calculation = xlManual     Application.EnableEvents = False              If Not Intersect(Target, Range("$L$5:$Y$9")) Is Nothing Then             Sub todo()          Range("E22") = WorksheetFunction.Sum(Range("E4:E21"))     Range("E23") = WorksheetFunction.Sum(Range("E4:E19"))     Range("E24") = WorksheetFunction.Sum(Range("E23") - WorksheetFunction.Sum(Range("I4:I7")))     Range("i22") = WorksheetFunction.Sum(Range("I4:I21"))     Range("I4") = Range("E23") * 0.1     Range("I6") = Range("E23") * 0.0127     Range("I5") = Range("EN10") * Range("EN11")     Range("I7") = Range("E23") * 0.006     Range("I25") = Range("E22") - Range("I22")     Range("I12") = Range("E24") * 0.03     Range("C7") = WorksheetFunction.Sum(Range("EQ8") - (Range("EQ9"))) + Range("EN13") + Range("EN14") + Range("EN15") + Range("EN16")     'Range("E7") = WorksheetFunction.Sum(Range("C7") * ((Range("E4") * 0.0077777)))     Range("C9") = Range("EQ9") + Range("EN17") + Range("EN18") + Range("EN19")     'Range("E9") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 45) * 1.3) * 1.5) * Range("C9")     'Range("E8") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 45) * 0.3)) * (Range("C8"))     Range("E9") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 44) * 1.3) * 1.5) * Range("C9")     Range("E8") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 44) * 0.3)) * (Range("C8"))     Range("E7") = WorksheetFunction.Sum((((Range("E4") / Range("C4")) * 7) / 44) * 1.5) * Range("C7")          End Sub              End If                  Application.Calculation = xlAutomatic     Application.ScreenUpdating = True     Application.EnableEvents = True     End Sub
    • Buenas perdonad la espera adjunto el fichero Excel y explico mas detallado lo que me solicitan: Lo que me solicitan es que esos CP de la pestaña Casos de prueba los cuales tienen formulas para que cuando se copien y peguen junto a sus pasos el CP se va autoincrementando a 1,2,3 etc...., pero si copias ese CP bien solo con el primer paso o con todos sus  pasos y lo insertas entre dos CP no continua con la numeración, como se ve en la foto al hacer eso el CP insertado continua con la numeración CP2 y el de abajo pone también CP2 no se incrementa ni ese ni el valor de CU que hay a la derecha que también es incremental. Necesitaría que continuara con esa numeración aun insertándolo entre medio de 2 tanto el CP como el CU de la derecha. También me solicitan que el campo Ciclo 1 de la pestaña Resumen es auto incremental cuando copias y pegas va sumando 1, pero en las formulas referentes a Ok KO Y bloqueo al copiar y pegar se mantiene la misma formula , la idea es que cuando copies y pegues la fila donde están los ciclos se autoincremente Ciclo a 1,2,3,4 etc... y la formula de los campos OK,KO y Bloqueos se incremente también pasando de la columna I a la J  luego a la k etc... y que en Resultados Ciclo el numero de la formula también se incremente Resultados Ciclo 1 , 2 ,3 etc... que cambie la columna a la vez que el numero de Resultados Ciclo. Gracias por adelantado un saludo. Plantilla v3 Pruebas.xlsx  
    • Saludos amigos espero estén bien Estoy intentando hacer un formulario que me convierta unidades de masa sin embargo  en el mejor de los casos solo he podido lograr la conversión de una unidad a la vez en los TextBox 1, 3, 5, 7, 9, 11 y 13 y cuando lo logro el resultado que se copia  en la celda no se corresponde con el obtenido originalmente en el Textbox del Formulario (frmconv)  ejemplo al convertir 1900 Kg a Lb el resultado en el TextBox1 =4188,78298142 sin embargo al guardar el resultado lo que se copia en la Celda  "F11" es  418.878.298.142,00, adicionalmente el resultado de la conversión no se visualiza inmediatamente por lo que debo de hacer click en los TextBox 1, 3, 5, 7, 9, 11 y 13  para ver el resultado. Mucho les sabre agradecer la ayuda que me puedan brindar. PRUEBA.xlsm
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.