Convertir números en letras con una única fórmula
Resuelto
FOUAD_9000
Mensajes publicados
63
Fecha de registro
Estado
Miembro
Última intervención
-
Mike-31 Mensajes publicados 18205 Fecha de registro Estado Colaborador Última intervención -
Mike-31 Mensajes publicados 18205 Fecha de registro Estado Colaborador Última intervención -
Bonjour amigos,
¿Hay alguien que pudiera corregirme esta fórmula única inventada por uno de los usuarios de este foro que permite convertir números en letras en Excel 365? El problema es que esta fórmula no muestra los céntimos.
La fórmula es la siguiente:
NOMPROPRE(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SI(NBCAR(ENT(A19))<=2;BUSCARV(EXTRAE(ENT(A19);1;3)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=3;BUSCARV(IZQUIERDA(ENT(A19);1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);2;3)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=4;BUSCARV(IZQUIERDA(ENT(A19);1)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENT(A19);2;1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);3;3)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=5;BUSCARV(IZQUIERDA(ENT(A19);2)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENT(A19);3;1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);4;2)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=6;BUSCARV(IZQUIERDA(ENT(A19);1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);2;2)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENT(A19);4;1)*1;numero_100;2;0)&" cent "&" "&BUSCARV(EXTRAE(ENT(A19);5;2)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=7;BUSCARV(IZQUIERDA(ENT(A19);1)*1;numero_100;2;0)&" millones "&BUSCARV(EXTRAE(ENT(A19);2;1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);3;2)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENT(A19);5;1)*1;numero_100;2;0)&" cent "&" "&BUSCARV(EXTRAE(ENT(A19);6;2)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=8;BUSCARV(IZQUIERDA(ENT(A19);2)*1;numero_100;2;0)&" millones "&BUSCARV(EXTRAE(ENT(A19);3;1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);4;2)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENT(A19);6;1)*1;numero_100;2;0)&" cent "&" "&BUSCARV(EXTRAE(ENT(A19);7;2)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=9;BUSCARV(IZQUIERDA(ENT(A19);1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);2;2)*1;numero_100;2;0)&" millones "&BUSCARV(EXTRAE(ENT(A19);4;1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);5;2)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENT(A19);7;1)*1;numero_100;2;0))&" cent "&BUSCARV(EXTRAE(ENT(A19);8;2)*1;numero_100;2;0))))))));"cero cent ";);"un cent ";"cent ");"Cero mil";);"Cero";"");"un mil ";" mil ");"cero";);"un millones ";" un millón ");" mil "" ")&" EURO "&SUSTITUIR(BUSCARV(SIERROR(EXTRAE(A19+0.001;ENCONTRAR(",";A19+0.001)+1;2)*1;0);numero_100;2;0)&" Centimos";"un Centimos";"un centimo"))
¿Hay alguien que pudiera corregirme esta fórmula única inventada por uno de los usuarios de este foro que permite convertir números en letras en Excel 365? El problema es que esta fórmula no muestra los céntimos.
La fórmula es la siguiente:
NOMPROPRE(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SI(NBCAR(ENT(A19))<=2;BUSCARV(EXTRAE(ENT(A19);1;3)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=3;BUSCARV(IZQUIERDA(ENT(A19);1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);2;3)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=4;BUSCARV(IZQUIERDA(ENT(A19);1)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENT(A19);2;1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);3;3)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=5;BUSCARV(IZQUIERDA(ENT(A19);2)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENT(A19);3;1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);4;2)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=6;BUSCARV(IZQUIERDA(ENT(A19);1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);2;2)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENT(A19);4;1)*1;numero_100;2;0)&" cent "&" "&BUSCARV(EXTRAE(ENT(A19);5;2)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=7;BUSCARV(IZQUIERDA(ENT(A19);1)*1;numero_100;2;0)&" millones "&BUSCARV(EXTRAE(ENT(A19);2;1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);3;2)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENT(A19);5;1)*1;numero_100;2;0)&" cent "&" "&BUSCARV(EXTRAE(ENT(A19);6;2)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=8;BUSCARV(IZQUIERDA(ENT(A19);2)*1;numero_100;2;0)&" millones "&BUSCARV(EXTRAE(ENT(A19);3;1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);4;2)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENT(A19);6;1)*1;numero_100;2;0)&" cent "&" "&BUSCARV(EXTRAE(ENT(A19);7;2)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=9;BUSCARV(IZQUIERDA(ENT(A19);1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);2;2)*1;numero_100;2;0)&" millones "&BUSCARV(EXTRAE(ENT(A19);4;1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENT(A19);5;2)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENT(A19);7;1)*1;numero_100;2;0))&" cent "&BUSCARV(EXTRAE(ENT(A19);8;2)*1;numero_100;2;0))))))));"cero cent ";);"un cent ";"cent ");"Cero mil";);"Cero";"");"un mil ";" mil ");"cero";);"un millones ";" un millón ");" mil "" ")&" EURO "&SUSTITUIR(BUSCARV(SIERROR(EXTRAE(A19+0.001;ENCONTRAR(",";A19+0.001)+1;2)*1;0);numero_100;2;0)&" Centimos";"un Centimos";"un centimo"))
18 respuestas
-
Hola FOUAD
Acabo de ver esto para instalar el complemento NBLettre en Office 365. Lo conocía, pero no sabía si era posible; al menos espero que sí ;)
https://microboum.blogspot.com/2019/09/excel-office-365-convertir-les-nombres.html
Saludos cordiales-
Hola,
El módulo existe desde hace mucho tiempo, no solo en Excel 365, me parecía recordar que solo mostraba las letras, no la moneda, perdón por mi error
Se le critica por un cierto número de imprecisiones en la expresión del resultado, pero que se pueden corregir para que quede bien a partir del código, como se discutió aquí:
https://forum.excel-pratique.com/excel/macro-complementaire-nb-lettre-xla-124216- Hola,
Por una razón que no comprendo, tu fórmula tal como se subió en <8> funciona incluso en Excel 2019 si entro en la celda B2 y presiono enter después del último carácter de la fórmula
un centime"))
Si cambio el valor en A2, la fórmula no se "actualiza" a menos que vuelva a presionar enter en B2 de la misma manera.
Queda, por supuesto, pero es otra cuestión, hacer las correcciones apropiadas:
Siete Cientos Veinte - Cuatro Millones Quinientos Setenta y Dos Mil Cuatrocientos Cincuenta y Siete Euros Treinta y Tres Céntimos
Dos Mil Cuatrocientos Cincuenta y Siete Euros Cero Céntimos
No hay ninguna razón para usar mayúsculas (y por tanto, NOMPROPRE), guiones o espacios entre los valores. Falta el acento en Cero y Céntimo en singular (sin embargo, es correcto para 2457,01 o 2457,02).
-
-
Hola,
O bien una creación de función por código VBA sacado de esta discusión
https://www.cjoint.com/c/LBkgQsup8B8
Atentamente-
En la última parte concatenada de la fórmula, reemplazar el punto por una coma para 0,001 &SUBSTITUIR(BUSCARV(SE.ERR(STEXTO(A19+0,001;ENCONTRAR(",";A19+0,001)+1;2)*1;0);chiffre_100;2;0)&" Céntimos";"un Céntimo";"un centavo")
Sin embargo, no puedo verificar esta fórmula porque falta la zona tratada por chiffre_100 -
No funciona todavía, ¿lo han probado? Si es así, por favor envíenme un archivo excel con la prueba.
=NOMPROPRE(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SI(NBCAR(ENT(A19))<=2;BUSCARV(EXTRAE(ENT(A19);1;3)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=3;BUSCARV(IZQUIERDA(ENT(A19);1)*1;numero_100;2;0)" cent "&BUSCARV(EXTRAE(ENT(A19);2;3)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=4;BUSCARV(IZQUIERDA(ENT(A19);1)*1;numero_100;2;0)" mil "&BUSCARV(EXTRAE(ENT(A19);2;1)*1;numero_100;2;0)" cent "&BUSCARV(EXTRAE(ENT(A19);3;3)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=5;BUSCARV(IZQUIERDA(ENT(A19);2)*1;numero_100;2;0)" mil "&BUSCARV(EXTRAE(ENT(A19);3;1)*1;numero_100;2;0)" cent "&BUSCARV(EXTRAE(ENT(A19);4;2)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=6;BUSCARV(IZQUIERDA(ENT(A19);1)*1;numero_100;2;0)" cent "&BUSCARV(EXTRAE(ENT(A19);2;2)*1;numero_100;2;0)" mil "&BUSCARV(EXTRAE(ENT(A19);4;1)*1;numero_100;2;0)" cent "&" "&BUSCARV(EXTRAE(ENT(A19);5;2)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=7;BUSCARV(IZQUIERDA(ENT(A19);1)*1;numero_100;2;0)" millones "&BUSCARV(EXTRAE(ENT(A19);2;1)*1;numero_100;2;0)" cent "&BUSCARV(EXTRAE(ENT(A19);3;2)*1;numero_100;2;0)" mil "&BUSCARV(EXTRAE(ENT(A19);5;1)*1;numero_100;2;0)" cent "&" "&BUSCARV(EXTRAE(ENT(A19);6;2)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=8;BUSCARV(IZQUIERDA(ENT(A19);2)*1;numero_100;2;0)" millones "&BUSCARV(EXTRAE(ENT(A19);3;1)*1;numero_100;2;0)" cent "&BUSCARV(EXTRAE(ENT(A19);4;2)*1;numero_100;2;0)" mil "&BUSCARV(EXTRAE(ENT(A19);6;1)*1;numero_100;2;0)" cent "&" "&BUSCARV(EXTRAE(ENT(A19);7;2)*1;numero_100;2;0);SI(NBCAR(ENT(A19))=9;BUSCARV(IZQUIERDA(ENT(A19);1)*1;numero_100;2;0)" cent "&BUSCARV(EXTRAE(ENT(A19);2;2)*1;numero_100;2;0)" millones "&BUSCARV(EXTRAE(ENT(A19);4;1)*1;numero_100;2;0)" cent "&BUSCARV(EXTRAE(ENT(A19);5;2)*1;numero_100;2;0)" mil "&BUSCARV(EXTRAE(ENT(A19);7;1)*1;numero_100;2;0))&" cent "&BUSCARV(EXTRAE(ENT(A19);8;2)*1;numero_100;2;0))))))));"cero cent ";);"un cent ";"cent ");"Cero mil";);"Cero";"");"un mil ";" mil ");"cero";);"un millones ";" un millón ");" mil "" ")&" EURO "&SUSTITUIR(BUSCARV(SIERROR(EXTRAE(A19+0,001;ENCONTRAR(",";A19+0,001)+1;2)*1;0);numero_100;2;0)&" Centavos";"un Centavos";"un centavo")- Falta un paréntesis de cierre al final "un céntimo"))
En mi prueba (Excel 2013) me devuelve el error #NOMBRE? porque falta la zona tratada por el nombre chiffre_100
Si quieren que verifiquemos, necesitaríamos un archivo de ejemplo sin los datos confidenciales y con esta zona nombrada
Vayan a https://www.cjoint.com/
•Hagan clic en "NAVEGAR" para seleccionar el archivo
O
•"HACER UN DESGLISAR Y SOLTAR" en la ventana ;
Hagan clic en el botón "CREAR EL ENLACE"
Para copiar/pegar el enlace: (2 métodos)
•Hagan un "CLIC DERECHO" en el enlace creado y hagan clic en "COPIAR LA DIRECCIÓN DEL ENLACE" ; en el post Hagan clic derecho "PEGAR".
•"COPIAR" el enlace ; en el post abran el corchete " Alt+[ " ; "PEGAR" el enlace ; cerrar con el corchete " Alt+] "
Otros sitios:
https://mon-partage.fr/
https://www.transfernow.net/
cordialmente
-
-
Hola, gracias por su amable respuesta, pero estoy buscando una sola y única fórmula sin VBA.
-
- RE:
Un detalle que acabo de ver, el cálculo de las fórmulas en modo manual.
No sé cómo es en Excel 365 - en el 2013 > pestaña FÓRMULAS > Opciones de cálculo > clic en "Automático"
Hay bastantes cosas que revisar en esta fórmula (vea los algunos ejemplos en el archivo adjunto
https://www.cjoint.com/c/LBkmMojFlZ8
También he encontrado en mis archivos un archivo sin VBA para adaptar si es necesario (en la hoja "monedas" haga aparecer las filas ocultas para entender)
https://www.cjoint.com/c/LBkmMtgPCh8
Atentamente
-
-
Hola,
No puedo probar ya que no tengo Excel 365 o 2021, cuyos 2 funciones son específicas, así que solo unas cuantas observaciones al pasar.
¿Por qué querer usar NOMPROPRE, dicho de otra manera, por qué las sumas en letras tendrían mayúsculas?
En el mismo sentido, ¿por qué "un millón" o "un céntimo" o "céntimos"?
Cabe señalar que, ya que hablamos de las funciones específicas de Excel 365, se propone otra solución aquí con la función LET:
https://www.excel-exercice.com/convertir-un-nombre-en-lettres/
Dicho esto, ¿por qué de manera más general querer pasar por una tal máquina complicada cuando una sola fórmula simple hace el trabajo siempre que se tenga una segunda hoja que contenga los datos y, por supuesto, algunos cálculos simples que no aparecerán en la impresión?-
¿Podría tener la amabilidad de enviarme, por favor, un archivo de excel con un caso de conversión utilizando la función LET?
- Concernant la sintaxis de la función LET:
https://support.microsoft.com/es-es/office/funci%C3%B3n-let-34842dd8-b92b-4d3f-b325-b8b8f9908999
Sobre tu fórmula anterior, las 2 últimas líneas no están, evidentemente, interpretadas, y es bastante laborioso encontrar el error en una fórmula tan compleja.
Primero hay que probar esta última fórmula por separado.
Por lo que puedo juzgar, me parece que hay un defecto de anidamiento de las funciones SI; aunque NBCAR no valga más que 4, que vamos a recorrer todo el archivo, la condición es negativa cada vez, pero que a priori estas 2 últimas líneas solo se ejecutan si NBCAR vale 9.
Así que comienza por ver qué pasa en este caso, será necesario eventualmente reemplazar todas las fórmulas, pero manteniendo la misma estructura de paréntesis, por respuestas simples en los SI ("toto", etc.) para verificar que el orden de las condicionales se respeta bien y que nos conectamos correctamente a la última expresión en todos los casos.
-
-
He revisado y corregido las erratas en el rango de nombres cifra_100;2;0, eliminado NOMPROPRE que no tiene por qué estar, corregido algunas erratas en la fórmula en sí.
Quedan al menos las condicionales que conjugan euro en plural (si es mayor que 2) y céntimos en singular (si hay cero)
En la primera, hay que reemplazar al final del archivo "& " euros " por &SI(A2>=2;" euros ";"euro ")
Tengo un error por debajo de 2 euros que aún no he localizado: uneuro cincuenta y tres
En la segunda, es la fórmula SIERREUR...TROUVE la que está fallando, no tengo tiempo para buscar ahora.
Y siempre sobre el hecho de que hay que validar cada vez la fórmula para actualizarla, no sé por qué, tal vez por su longitud.
https://www.cjoint.com/c/LBplXGVG3bO -
Hola el hilo,
tomo la discusión en curso, si pones el cálculo en automático, la fórmula se actualiza.
Archivo/Opciones/rúbrica Fórmula/marcar Cálculo del libro Automático, luego guardar el archivo
por otro lado, si ingresamos 0,1 o 0,01, la fórmula devuelve euro diez céntimos o euro un céntimo
si tengo un momento esta tarde, miraré si puedo quitar el euro delante de los decimales si no hay, o mostrar 0 euro, etc.
A+
Mike-31
Soy responsable de lo que digo, no de lo que entiendes...-
Hola,
Sí, soy tonto como para comer heno con un tenedor; con cálculo automático, de hecho es mejor.
No solo está en juego el "euro"
0,01 convierte euro en un céntimo, 1,00 en un euro cero céntimos, 1000,03 un espacio superfluo entre mil y euros, lo mismo para 10000,
100000 nos deja en cien euros cero céntimos
Si gano la lotería a 10883366,08, espacio superfluo entre cien y sesenta
No he encontrado nada más por sondeo por el momento, todavía hay un poco de trabajo que corregir todo esto.
-
-
Re,
No te sientas culpable, a todos nos pasa quedarnos atascados en una solución evidente
mira la fórmula así que toma el plural de los Euros como los céntimos
=SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SI(NBCAR(ENTERO(A2))<=2;BUSCARV(EXTRAE(ENTERO(A2);1;3)*1;numero_100;2;0);SI(NBCAR(ENTERO(A2))=3;BUSCARV(IZQUIERDA(ENTERO(A2);1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENTERO(A2);2;3)*1;numero_100;2;0);SI(NBCAR(ENTERO(A2))=4;BUSCARV(IZQUIERDA(ENTERO(A2);1)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENTERO(A2);2;1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENTERO(A2);3;3)*1;numero_100;2;0);SI(NBCAR(ENTERO(A2))=5;BUSCARV(IZQUIERDA(ENTERO(A2);2)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENTERO(A2);3;1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENTERO(A2);4;2)*1;numero_100;2;0);SI(NBCAR(ENTERO(A2))=6;BUSCARV(IZQUIERDA(ENTERO(A2);1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENTERO(A2);2;2)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENTERO(A2);4;1)*1;numero_100;2;0)&" cent "&" "&BUSCARV(EXTRAE(ENTERO(A2);5;2)*1;numero_100;2;0);SI(NBCAR(ENTERO(A2))=7;BUSCARV(IZQUIERDA(ENTERO(A2);1)*1;numero_100;2;0)&" millones "&BUSCARV(EXTRAE(ENTERO(A2);2;1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENTERO(A2);3;2)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENTERO(A2);5;1)*1;numero_100;2;0)&" cent "&" "&BUSCARV(EXTRAE(ENTERO(A2);6;2)*1;numero_100;2;0);SI(NBCAR(ENTERO(A2))=8;BUSCARV(IZQUIERDA(ENTERO(A2);2)*1;numero_100;2;0)&" millones "&BUSCARV(EXTRAE(ENTERO(A2);3;1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENTERO(A2);4;2)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENTERO(A2);6;1)*1;numero_100;2;0)&" cent "&" "&BUSCARV(EXTRAE(ENTERO(A2);7;2)*1;numero_100;2;0);SI(NBCAR(ENTERO(A2))=9;BUSCARV(IZQUIERDA(ENTERO(A2);1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENTERO(A2);2;2)*1;numero_100;2;0)&" millones "&BUSCARV(EXTRAE(ENTERO(A2);4;1)*1;numero_100;2;0)&" cent "&BUSCARV(EXTRAE(ENTERO(A2);5;2)*1;numero_100;2;0)&" mil "&BUSCARV(EXTRAE(ENTERO(A2);7;1)*1;numero_100;2;0))&" cent "&BUSCARV(EXTRAE(ENTERO(A2);8;2)*1;numero_100;2;0))))))));"cero cent ";);"uno cent ";"cent ");" cero mil ";);"cero";"");"uno mil ";" mil ");"cero";);"uno millón ";" un millón ");" mil "" ")&TEXTO(ENTERO(A2);"[>1]"" Euros "";[>]"" Euro "";")&SUSTITUIR(BUSCARV(SIERROR(EXTRAE(A2+0,001;ENCONTRAR(",";A2+0,001)+1;2)*1;0);numero_100;2;0)&"";"";"")&TEXTO(ENTERO((A2-ENTERO(A2))*100);"[>1]"" Céntimos "";[>]"" Céntimo "";")
efectivamente noto que el código se limita después de 99999,99
por mi parte revisaré esta noche
--
A+
Mike-31
Soy responsable de lo que digo, no de lo que tú entiendes... -
Re,
Para tratar todos los casos con la fórmula inicial, personalmente estoy llegando a la saturación de las condicionales del campo chiffre_100 así como de la fórmula y buena suerte para intervenir en esta fábrica de gas.
¿Por qué no pasar a fórmulas básicas en una columna que puede estar oculta?
Si interesa, empiezo por nombrar la celda objetivo (celda de entrada del valor), en mi ejemplo la he nombrado simplemente Cible
luego las fórmulas del rango A2:A94, al igual que la celda Cible, pueden ser CORTADAS (movidas) y la fórmula se actualizará automáticamente.
luego las celdas D5, D7 o D9 muestran varios formatos de visualización a partir de la celda concatenada A94
https://www.cjoint.com/c/LBqrpz8IsxF
A+
Mike-31
Soy responsable de lo que digo, no de lo que tú entiendes... -
Hola y gracias a todos,
Conozco todas las opciones que han sugerido, pero mi deseo es una única y sola fórmula. Es un desafío que afrontar, buena suerte. -
Saludos a todos,
Yo me rindo.
Buena continuación. -
Re,
entonces si es un desafío, nombra la celda en la que vas a ingresar tu valor, para mi fórmula la celda ejemplo B2 nombrada Objetivo esto evitará tener que ingresar X veces la dirección de la celda numérica y generar un error.
Por supuesto, el nombre Objetivo podrá ser modificado después de la validación y la fórmula tomará automáticamente el nuevo nombre.
Luego, pega esta fórmula en una celda, pero buena suerte para seguirla
=SI(ENT(Objetivo)=0;"CERO ";SI(MOD(ENT(Objetivo/10^9);1000)>99;ELEGIR(MOD(ENT(Objetivo/10^9);1000)/100;;"DOS ";"TRES ";"CUATRO ";"CINCO ";"SEIS ";"SIETE ";"OCHO ";"NUEVE ")&"CIENTO"&SI(MOD(ENT(Objetivo/10^9);1000)>100;SI(MOD(MOD(ENT(Objetivo/10^9);1000);100)=0;"S";" "););)&ELEGIR(MOD(MOD(ENT(Objetivo/10^9);1000)/10;10)+1;;;"VEINTE";"TREINTA";"CUARENTA";"CINCUENTA";"SESENTA";"SESENTA";"OCHENTA"&SI(MOD(MOD(ENT(Objetivo/10^9);1000);10)=0;"S";);"OCHENTA")&SI(MOD(MOD(ENT(Objetivo/10^9);1000);100)<20;;SI(ET(OU(MOD(MOD(ENT(Objetivo/10^9);1000);10)<>0;MOD(MOD(ENT(Objetivo/10^9);1000);100)=70;MOD(MOD(ENT(Objetivo/10^9);1000);100)=90));SI(ET(MOD(MOD(ENT(Objetivo/10^9);1000);10)=1;MOD(MOD(ENT(Objetivo/10^9);1000);100)<80);" Y ";"-");))&ELEGIR(MOD(MOD(ENT(Objetivo/10^9);1000);100)-ELEGIR(MOD(MOD(ENT(Objetivo/10^9);1000)/10;10)+1;;;2;3;4;5;6;6;8;8)*10+1;;"UNO";"DOS";"TRES";"CUATRO";"CINCO";"SEIS";"SIETE";"OCHO";"NUEVE";"DIEZ";"ONCE";"DOCE";"TRECE";"CATORCE";"QUINCE";"DIECISEIS";"DIECISIETE";"DIECIOCHO";"DIECINUEVE")&SI(MOD(ENT(Objetivo/10^9);1000)>0;" MIL MILLONES"&SI(MOD(ENT(Objetivo/10^9);1000)>1;"S";);)&SI(Objetivo>10^9;" ";)&SI(MOD(ENT(Objetivo/10^6);1000)>99;ELEGIR(MOD(ENT(Objetivo/10^6);1000)/100;;"DOS ";"TRES ";"CUATRO ";"CINCO ";"SEIS ";"SIETE ";"OCHO ";"NUEVE ")&"CIENTO"&SI(MOD(ENT(Objetivo/10^6);1000)>100;SI(MOD(MOD(ENT(Objetivo/10^6);1000);100)=0;"S";" "););)&ELEGIR(MOD(MOD(ENT(Objetivo/10^6);1000)/10;10)+1;;;"VEINTE";"TREINTA";"CUARENTA";"CINCUENTA";"SESENTA";"SESENTA";"OCHENTA"&SI(MOD(MOD(ENT(Objetivo/10^6);1000);10)=0;"S";);"OCHENTA")&SI(MOD(MOD(ENT(Objetivo/10^6);1000);100)<20;;SI(ET(OU(MOD(MOD(ENT(Objetivo/10^6);1000);10)<>0;MOD(MOD(ENT(Objetivo/10^6);1000);100)=70;MOD(MOD(ENT(Objetivo/10^6);1000);100)=90));SI(ET(MOD(MOD(ENT(Objetivo/10^6);1000);10)=1;MOD(MOD(ENT(Objetivo/10^6);1000);100)<80);" Y ";"-");))&ELEGIR(MOD(MOD(ENT(Objetivo/10^6);1000);100)-ELEGIR(MOD(MOD(ENT(Objetivo/10^6);1000)/10;10)+1;;;2;3;4;5;6;6;8;8)*10+1;;"UNO";"DOS";"TRES";"CUATRO";"CINCO";"SEIS";"SIETE";"OCHO";"NUEVE";"DIEZ";"ONCE";"DOCE";"TRECE";"CATORCE";"QUINCE";"DIECISEIS";"DIECISETE";"DIECIOCHO";"DIECINUEVE")&SI(MOD(ENT(Objetivo/10^6);1000)>0;" MILLÓN"&SI(MOD(ENT(Objetivo/10^6);1000)>1;"S";);)&SI(Objetivo>10^6;" ";)&SI(MOD(ENT(Objetivo/10^3);1000)>1;SI(MOD(ENT(Objetivo/10^3);1000)>99;ELEGIR(MOD(ENT(Objetivo/10^3);1000)/100;;"DOS ";"TRES ";"CUATRO ";"CINCO ";"SEIS ";"SIETE ";"OCHO ";"NUEVE ")&"CIENTO"&SI(MOD(ENT(Objetivo/10^3);1000)>100;SI(MOD(MOD(ENT(Objetivo/10^3);1000);100)=0;"S";" "););)&ELEGIR(MOD(MOD(ENT(Objetivo/10^3);1000)/10;10)+1;;;"VEINTE";"TREINTA";"CUARENTA";"CINCUENTA";"SESENTA";"SESENTA";"OCHENTA"&SI(MOD(MOD(ENT(Objetivo/10^3);1000);10)=0;"S";);"OCHENTA")&SI(MOD(MOD(ENT(Objetivo/10^3);1000);100)<20;;SI(ET(OU(MOD(MOD(ENT(Objetivo/10^3);1000);10)<>0;MOD(MOD(ENT(Objetivo/10^3);1000);100)=70;MOD(MOD(ENT(Objetivo/10^3);1000);100)=90));SI(ET(MOD(MOD(ENT(Objetivo/10^3);1000);10)=1;MOD(MOD(ENT(Objetivo/10^3);1000);100)<80);" Y ";"-");))&ELEGIR(MOD(MOD(ENT(Objetivo/10^3);1000);100)-ELEGIR(MOD(MOD(ENT(Objetivo/10^3);1000)/10;10)+1;;;2;3;4;5;6;6;8;8)*10+1;;"UNO";"DOS";"TRES";"CUATRO";"CINCO";"SEIS";"SIETE";"OCHO";"NUEVE";"DIEZ";"ONCE";"DOCE";"TRECE";"CATORCE";"QUINCE";"DIECISEIS";"DIECISETE";"DIECIOCHO";"DIECINUEVE")&" MIL";SI(MOD(ENT(Objetivo/10^3);1000)=1;"MIL";))&SI(Objetivo>10^3;" ";))&SI(ENT(Objetivo-ENT(Objetivo/1000)*1000)>0;SI(ENT(Objetivo-ENT(Objetivo/1000)*1000)>99;ELEGIR(ENT(Objetivo-ENT(Objetivo/1000)*1000)/100;;"DOS ";"TRES ";"CUATRO ";"CINCO ";"SEIS ";"SIETE ";"OCHO ";"NUEVE ")&"CIENTO"&SI(ENT(Objetivo-ENT(Objetivo/1000)*1000)>100;SI(MOD(ENT(Objetivo-ENT(Objetivo/1000)*1000);100)=0;"S";" "););)&ELEGIR(MOD(ENT(Objetivo-ENT(Objetivo/1000)*1000)/10;10)+1;;;"VEINTE";"TREINTA";"CUARENTA";"CINCUENTA";"SESENTA";"SESENTA";"OCHENTA"&SI(MOD(ENT(Objetivo-ENT(Objetivo/1000)*1000);10)=0;"S";);"OCHENTA")&SI(MOD(ENT(Objetivo-ENT(Objetivo/1000)*1000);100)<20;;SI(ET(OU(MOD(ENT(Objetivo-ENT(Objetivo/1000)*1000);10)<>0;MOD(ENT(Objetivo-ENT(Objetivo/1000)*1000);100)=70;MOD(ENT(Objetivo-ENT(Objetivo/1000)*1000);100)=90));SI(ET(MOD(ENT(Objetivo-ENT(Objetivo/1000)*1000);10)=1;MOD(ENT(Objetivo-ENT(Objetivo/1000)*1000);100)<80);" Y ";"-");))&ELEGIR(MOD(ENT(Objetivo-ENT(Objetivo/1000)*1000);100)-ELEGIR(MOD(ENT(Objetivo-ENT(Objetivo/1000)*1000)/10;10)+1;;;2;3;4;5;6;6;8;8)*10+1;;"UNO";"DOS";"TRES";"CUATRO";"CINCO";"SEIS";"SIETE";"OCHO";"NUEVE";"DIEZ";"ONCE";"DOCE";"TRECE";"CATORCE";"QUINCE";"DIECISEIS";"DIECISETE";"DIECIOCHO";"DIECINUEVE");)&SI(ENT(ENT(Objetivo-ENT(Objetivo/1000)*1000))>0;" ";)&"EURO"&SI(ENT(Objetivo)>1;"S";)&SI(ARRONDI((Objetivo-ENT(Objetivo))*100;2)>0;" "&SI(ARRONDI((Objetivo-ENT(Objetivo))*100;2)>99;ELEGIR(ARRONDI((Objetivo-ENT(Objetivo))*100;2)/100;;"DOS ";"TRES ";"CUATRO ";"CINCO ";"SEIS ";"SIETE ";"OCHO ";"NUEVE ")&"CIENTO"&SI(ARRONDI((Objetivo-ENT(Objetivo))*100;2)>100;SI(MOD(ARRONDI((Objetivo-ENT(Objetivo))*100;2);100)=0;"S";" "););)&ELEGIR(MOD(ARRONDI((Objetivo-ENT(Objetivo))*100;2)/10;10)+1;;;"VEINTE";"TREINTA";"CUARENTA";"CINCUENTA";"SESENTA";"SESENTA";"OCHENTA"&SI(MOD(ARRONDI((Objetivo-ENT(Objetivo))*100;2);10)=0;"S";);"OCHENTA")&SI(MOD(ARRONDI((Objetivo-ENT(Objetivo))*100;2);100)<20;;SI(ET(OU(MOD(ARRONDI((Objetivo-ENT(Objetivo))*100;2);10)<>0;MOD(ARRONDI((Objetivo-ENT(Objetivo))*100;2);100)=70;MOD(ARRONDI((Objetivo-ENT(Objetivo))*100;2);100)=90));SI(ET(MOD(ARRONDI((Objetivo-ENT(Objetivo))*100;2);10)=1;MOD(ARRONDI((Objetivo-ENT(Objetivo))*100;2);100)<80);" Y ";"-");))&ELEGIR(MOD(ARRONDI((Objetivo-ENT(Objetivo))*100;2);100)-ELEGIR(MOD(ARRONDI((Objetivo-ENT(Objetivo))*100;2)/10;10)+1;;;2;3;4;5;6;6;8;8)*10+1;;"UNO";"DOS";"TRES";"CUATRO";"CINCO";"SEIS";"SIETE";"OCHO";"NUEVE";"DIEZ";"ONCE";"DOCE";"TRECE";"CATORCE";"QUINCE";"DIECISEIS";"DIECISETE";"DIECIOCHO";"DIECINUEVE")&" CENTAVO"&SI(ARRONDI((Objetivo-ENT(Objetivo))*100;2)>1;"S";);)
https://www.cjoint.com/c/LBrjIBwCIxF
A+
Mike-31
Soy responsable de lo que digo, no de lo que tú comprendes... -
Hola,
En modo OFF, Fouad ha recuperado de Internet una receta de cocina llena de faltas de ortografía y errores de función.
Como se ha repetido hasta la saciedad, la solución es muy simple a través de una segunda hoja (o una zona de datos en la primera), y probablemente también lo es en VBA, en lo que soy perfectamente incompetente, pero no quiere oír hablar ni de una ni de la otra.
De la misma manera que en los años 80 los 4 o 5 brujos del batch demostraban cosas increíbles sin usar ninguna utilidad solo por el placer de mostrar que eran posibles, probablemente hay una solución mediante una sola fórmula.
Es aún más indigesta ya que tiene kilómetros de longitud, lo que hace prácticamente imposible detectar los errores; hay que rehacer todo desde cero probando por separado la fórmula de cada orden de magnitud, un trabajo de romanos.
Si tengo mucho tiempo que perder, aceptaré el desafío que no sirve para nada más que la divisa de la escuela politécnica (por la patria, las ciencias y la gloria); por ahora, funciona hasta 999,99€ en todos los casos, incluidos los retorcidos (menos de 1€, menos de 2€, centavo aislado o ausente, ausencia del dígito de las decenas, por ejemplo en 200,83€): solo quedan por probar e intercalar 4 etapas más para llegar a los millones, es un sinsentido en términos de tiempo dedicado a complicar lo que no lo es.
Finalmente, observemos que Fouad solo reclama telegráficamente y de manera repetitiva una fórmula lista para usar sin nunca realizar ninguna modificación, ni siquiera de las erratas (por ejemplo "treise" (sic) y otras incoherencias de la tabla), al mismo tiempo que pretende destinar su uso a principiantes que serán aún menos capaces de dominar una fórmula de tal complejidad que él mismo no lo hace. -
Hola,
Lo más complicado en este asunto son menos las fórmulas que las reglas gramaticales que sintetizo:
-mil es invariable, 80 y 100 solo concuerdan cuando no están seguidos, el plural comienza en 2.
-en gramática tradicional, solo los números compuestos menores de 100 llevan guion y cuando no terminan en uno: en este caso, el guion solo se aplica a 81 y 91, de lo contrario se usa "y".
-las "recomendaciones" de 1990 (por lo tanto, sin valor normativo) proponen unir todos los numerales por un guion y planteando una polémica sobre el destino de "millón" y "mil millones" que no son numerales.
Sea el tema monetario o no, solo la letra al principio del título (Cincuenta sombras de Grey) o de la frase (Treinta puntos fueron anotados por el pivot) lleva mayúscula; en materia monetaria no se planteará habitualmente la cuestión en ninguno de los casos.
En cuanto al fondo del "ejercicio", la solución más simple y al alcance de los principiantes, ya que se dice que figura en el pliego de condiciones, es usar una hoja separada.
Aunque es absurdo, Mike aceptó el desafío de hacer que todo encajara en una sola fórmula; necesariamente es compleja y larga ya que el valor de los números debe estar integrado (y también porque funciona con 14 cifras significativas inferiores a mil millones de euros).
Dado que la fórmula inicial (que no funcionaba) ya incluía una tabla de nombres, propongo una alternativa con una fórmula que contiene 3 (para tener en cuenta sin condicional el caso de los 1 y los 0) pero que, la verdad, por pereza, no he llevado más allá de 9 cifras significativas inferiores a 10 millones; es simple añadir tantos como se quiera con el modelo.
He optado por la regla de gramática tradicional, no tanto porque sea más fácil de implementar, sino porque creo que hace menos daño a la vista: aquí también, a cada uno lo suyo.
La pesadez de las fórmulas hace que los errores sean casi inevitables.
Mike ha optado por prescindir de NOMPROPRE y MAYÚSCULA, pero como hemos visto, no tenían nada que ver...escribiendo todo en mayúsculas.
También hay un error en el plural de cien: ochocientos cincuenta y cuatro en lugar de ochocento cincuenta y cuatro.
Aquellos a quienes les interese el tema (no estoy seguro de que haya alguien más que Fouad) querrán señalarme los míos.
https://www.cjoint.com/c/LBupkoGKfMO -
Hola a todos,
Gracias por todos sus esfuerzos, creo que estamos en el buen camino, pronto encontraremos una y solo una fórmula. Ánimo. -
Hola,
¿De qué nos hablas?
La solución implementada por Mike en <26> solo pone en cuestión una fórmula, acabo de proponer una en <28> que, al igual que tu fórmula inicial en <1>, pasa por el gestor de nombres (con 3 nombres definidos en lugar de uno) y siempre sin hoja adicional ni VBA, pero que a diferencia de la fórmula <1> funciona. -
Re,
Sería deseable que FOUAD responda a cada post si quiere que avancemos, como por ejemplo a mi post 26 para permitir mejorarlo o reparar un error.
en corto pronto encontraremos una y una sola fórmula. Ánimo no aporta avance a la discusión.
Brucine, acabo de echar un vistazo a tu propuesta post 28, parece que 0,01, 0,1 y 1,01 no se muestran correctamente.
No he ido más allá.
Si notas un error en mi propuesta post 26, indícalo si es posible solucionarlo
--
Hasta luego
Mike-31
Soy responsable de lo que digo, no de lo que entiendes... -
Gracias,
0,1 funcionaba pero, en mi frenesí por crear tablas de nombres adicionales, había modificado por inadvertencia la tabla original cifra_100 con el valor de 1 "" en lugar de "uno" y esta tabla solo se utiliza para los céntimos... -
Re, Mike:
He convertido tu fórmula en minúsculas, me dolía la vista.
Tienes un error en el plural de 80 cuando está seguido: por ejemplo, en 101080,20, hay una “s” superflua en veinte que solo debería encontrar en 101080,00.
Me parecía haber encontrado algo comparable en la expresión de cien solo en ciertas circunstancias (se escribe cuatrocientos euros pero doscientos veinticuatro euros), debí estar soñando, no lo encuentro.