¿Como convertir de números a letras? ¿Existe alguna función para obtener en palabras un numero/cantidad dentro de una celda?
Este problema en Excel se resuelve programando una función en VBA la cual realiza la conversión. La utilidad de esta función es para todas aquellas personas que tengan que trabajar con cajas o elaboración de cheques o finiquitos, entre otros más...
En Sheets tambien se puede crear una función como en VBA/Excel programandola en Apps Script, pero en esta ocasión voy a mostrar una alternativa que solo requiere el uso de funciones, sin necesidad de programar o instalar complementos, para ello vamos a ocupar dos funciones, las cuales son:
Como verán no voy a profundizar en explicar su uso, pero he puesto un vinculo en la documentación oficial don se explica cada una de ellas e incluso hay breves ejemplos. En el mundo de la programación por lo general, alguien ya ha resuelto el problema que se nos presenta, entonces no hay necesidad de reinventar la rueda. ¿A que viene esta frase?, fácil, posiblemente alguien haya ya programado una web app que haga la conversión y que nosotros solo tengamos que enviarle el numero o cantidad ha convertir y recuperar el resultado devuelto. Inicialmente estuve buscando paginas en español que hicieran la conversión, pero me resulto difícil leer la salida o resultado brindado por las misma, pero encontré una en ingles a la cual se le puede pasar como p'arametro el numero via url y leer el resultado del html generado, dicha pagina es la siguiente:
A este conversor numérico nos pide que introduzcamos la una cantidad y después pulsemos un botón para obtener el resultado
Excelente, funciona! Pero hay dos inconvenientes los cuales son que queremos el resultado de manera automática en nuestra hoja de calculo y ademas lo queremos en español, vayamos a resolver esas cuestiones. Primero para traernos resultado hay que armar una url como la siguiente:
Esta url si la escribimos en nuestro navegador nos da el resultado ya sin pulsar el botón, al parametro number se le asigna el numero a convertir, solo hay que obtener el resultado de la pagina con el argumento deseado en nuestra hoja de calculo y para ello utilizaremos la función IMPORTXML de la siguiente forma en alguna celda de nuestra hoja de cálculo:
=IMPORTXML("https://www.lemoda.net/tools/numbers/index.es.cgi?number=10546","//p[3]")
Bien, ya casi lo hemos logrado. El segundo argumento de la función siempre sera "//p[3]" a menos que el programador de la pagina haga algún cambio en la estructura de la misma. Ahora si modificamos el numero 10546 por otro, deberíamos estar visualizando el resultado donde tenemos nuestra función, pero queremos el resultado en español y para ello utilizaremos la función GOOGLETRANSLATE y debe quedarnos de la siguiente forma:
=GOOGLETRANSLATE( IMPORTXML("https://www.lemoda.net/tools/numbers/index.es.cgi?number=10546","//p[3]"))
Ya tenemos nuestro numero en español, eso esta perfecto, pero no queremos estar modificando el numero a convertir y si mejor lo leemos de una celda para que nos devuelva el resultado de manera automática, bueno siendo así podríamos escribir el número a convertir en la celda B1 y modificar nuestra fórmula para que quede de la siguiente manera:
=GOOGLETRANSLATE( IMPORTXML("https://www.lemoda.net/tools/numbers/index.es.cgi?number="&B1,"//p[3]"))
Listo, lo hemos logrado! Salvo por algunos detalles... a veces la traducción no es muy buena y cuando usamos cantidades con decimales, nos devuelve la palabra punto y no es muy funcional para cuando se requiere resultados como: "Quinientos cuarenta y tres pesos 34/100 MX"
Bueno para ello tenemos dos opciones utilizar la función sustituir para en automático hacer los cambios correspondientes o copiar y pegar como el resultado devuelto y editar mano.
Por último, les comparto el documento con el ejemplo, dicho documento contiene dos alternativas mas brindadas por personas interesadas en el tema a las cuales agradezco su aportación.
Actualización:
Ha pasado bastante tiempo en el cual algunos lectores me han facilitado algunas alternativas para no tener los problemas de traducción haciendo uso de conversores en español con lo cual nos ahorraremos la función TRANSLATE. Estas son las alternativas:
Muchas gracias
ResponderBorrarEspero sea de suma utilidad! Saludos!
BorrarAyuda tienes dias que ya no funciona... help
BorrarPrueba con lo siguiente:
Borrar=SUSTITUIR(GOOGLETRANSLATE(BAHTTEXT(B1),"th","es"),"baht","")
Excelente post, muchos éxitos!
ResponderBorrarEstá muy interesante tu aporte, pero al efectuar la traducción google todavía no puede traducir correctamente mira como con este número queda mal escrito la cifra en letras:
ResponderBorrarNúmero a evaluar: 1526
En ingles
Resultado ▶ One thousand five hundred and twenty-six
=GOOGLETRANSLATE( IMPORTXML("https://www.lemoda.net/tools/numbers/index.es.cgi?number="&B1,"//p[3]"))
En español
Resultado ▶ Un mil quinientos de veinte-de seis
=GOOGLETRANSLATE(IMPORTXML("https://www.lemoda.net/tools/numbers/index.es.cgi?number="&B1,"//p[3]"),"en","es")
Donde correctamente debería de escribir Resultado ▶ Mil quinientos veintiséis
Te invito a visitar https://numeros-a-letras.todala.info/
Espero podamos mejorar tu solución con spreadsheet que es muy interesante. Éxito amigo
Hola wuarbuz! Gracias por comentar...
BorrarEfectivamente no hay una traducción perfecta al utilizar el resultado de la url que utilizo para pasar la cantidad a letras y en el mismo post lo dejo en claro.
Ahora tu me brindas una alternativa de url que pasa las cantidades a letras, pero en español, ya sin los problemas de traducción. El problema con esa url es como le paso como parámetro el número a convertir. Cada url maneja parametros distintos, en la url que manejo el parámetro se llama number, pero en la que tu me brindas, como se llama?
He intentado y no lo he logrado, si tu eres el desarrollador de dicha url o tienes tiempo de investigar adelante el nombre del parámetro que mejor, ya podremos brindar una mejor solución.
Saludos!
Han podido resolver el problema con https://numeros-a-letras.todala.info/???
ResponderBorrarHola! A que problema te refieres?
BorrarGUAUU increiblemente itul! Gracias mil
ResponderBorrarHola! Que bueno que te haya sido de utilidad. Saludos!
Borrarme sale error de fórmula
ResponderBorrarAqui esta una alternativa corregida.
ResponderBorrar=UPPER(GOOGLETRANSLATE(IMPORTXML("https://www.buscapalabra.com/numeros-a-letras.html?cifra="&B1,"//li[1]//strong"),"en","es"))
Excelente, muy buen aporte, gracias! Ya lo agregue en el documento compartido como una segunda alternativa. Esa pagina te da el resultado en español, yo lo intente con:
Borrar=IMPORTXML("https://www.buscapalabra.com/numeros-a-letras.html?cifra="&B1,"//li[1]//strong")
Muchisimas Gracias !!!!! funciona perfecto !
Borrargracias muy útil
ResponderBorrarno me sirvió ninguna alternativa
ResponderBorrarHola! Ya descargaste el archivo de ejemplo?
BorrarHola, hace unos dias me ha estado fallando, busque en google y vi que estabas usando lo mismo que yo, baje tu ejenplo y me marca N/A, alguien sabe algo ???? ayuda ya me quede sin esa funcion... ayuda
BorrarHola, prueba con:
Borrar=SUSTITUIR(GOOGLETRANSLATE(BAHTTEXT(B1),"th","es"),"baht","")
Hola, directo al español de una :
ResponderBorrar=IMPORTXML("https://www.lemoda.net/tools/spanish-numbers/index.cgi?number="&A1;"//p[2]")
Excelente magnifico aporte! Ya lo agregue al documento de ejemplo. Ya tenemos tres alternativas! Gracias.
BorrarCRACKKKKK FUE LA UNICA QUE ME FUNCIONOOOO
BorrarExcelente Aporte!! Esta también fue la unica que me funcionó. Solo con el detalle que coloca ctms en lo correspondiente a centavos. Y que me quedaria de 100 si lo diera en mayusculas, pero por lo demas está super bien!! GRacias por el aporte de nuevo!!!
BorrarHola, funciono perfectamente durante un par de dias, luego de eso me sale el siguiente error: "No se pudo obtener la URL: https://www.lemoda.net/tools/spanish-numbers/index.cgi?number=110"
BorrarComo se lo soluciona ?
Excelente aporte, muchas gracias !!
ResponderBorrarHola Julio Cesar! que bueno que te haya sido de utilidad. Espero seguir publicando post que puedan serlo también. Saludos!
BorrarMuchas gracias, me ayudaron con lo más difícil de mi trabajo.
ResponderBorrarFelicitaciones
Hola! Que bueno que te haya sido de utilidad. Espero seguir publicando post que puedan serlo también. Saludos!
BorrarHola! cuando el numero en la celda es producto de una formula no me reconoce el numero, eso tiene solución?
ResponderBorrarHola Carola. Acabo de realizar la prueba multiplicando dos celdas y si lo convierte a letras. Deberías compartir una copia de tu documento para ver que problema especifico tienes.
BorrarSaludos.
servicor caido, no traduce desde =IMPORTXML("https://www.lemoda.net/tools/numbers/index.es.cgi?number=10546","//p[3]") me sale #N/A
ResponderBorrarEn efecto no traduce, pero ya intentaste con la alternativa #2?
Borrar=INDICE(IMPORTXML("https://www.buscapalabra.com/numeros-a-letras.html?cifra="&B1,"//li[1]//strong"),1)
EL LINK DE EJEMPLO TAMBIEN NO TRADUCE DE NUMERO A LETRAS ..https://docs.google.com/spreadsheets/d/1mLunYST0qT29PRtWXTf8DLtmXo02XVt9d1tIce8PwSs/edit#gid=1844974892
ResponderBorrarHola, funciono perfectamente durante un par de dias, luego de eso me sale el error que no puede leer la URL, sin embargo cuando la ejecuto desde el navegador la URL si funciona.
ResponderBorrarComo se soluciona ese incionveniente ?
Por favor lee los comentarios previos... Ya he dado respuesta a este problema:
BorrarEn efecto no traduce, pero ya intentaste con la alternativa #2?
=INDICE(IMPORTXML("https://www.buscapalabra.com/numeros-a-letras.html?cifra="&B1,"//li[1]//strong"),1)
Hola, leyendo los comentario anteriores he intentado con la alternativa #2 que mencionas =INDICE(IMPORTXML("https://www.buscapalabra.com/numeros-a-letras.html?cifra="&B1,"//li[1]//strong"),1)
ResponderBorrarpero me aparece ERROR aparte de cambiar el B1 correspondiente a la celda que necesito, debo cambiar algún otro valor? Muchas gracias
Revisa el siguiente ejemplo:
Borrarhttps://docs.google.com/spreadsheets/d/1mLunYST0qT29PRtWXTf8DLtmXo02XVt9d1tIce8PwSs/edit#gid=986090852
A mi me esta funcionando.
Estimados, la formula antes descrita es para las personas que usan win versión Ingles. En nuestro caso que tenemos win en español debes cambiar los separadores de variables (,) por punto y coma (;) así:
Borrar=INDICE(IMPORTXML("https://www.buscapalabra.com/numeros-a-letras.html?cifra="&B1;"//li[1]//strong");1)
Estimado, tienes un punto pero eso que describes no depende del sistema operativo sino mas bien de la configuración regional de tu hoja de cálculo. Omití los separadores de argumento por que considero que es algo básico que se debería saber pero gracias por comentarlo. Quizá deba hacer un post explicando el tema de los separadores y como cambiarlos. Saludos.
BorrarHolaaa... te comento que no pude. Coloco la formula y siempre me sale en error. esta parte &B1," me sale en negro mientras la demás formula me sale en negro. si coloco solo la celda, es decir B1 el numero me sale en naranja pero la formula da como resultado: #N/A. en este caso que puedo hacer? ayudameee... por favor.
ResponderBorrarSiento decirte que es muy poco detalle o que brindas parea poder darte una respuesta. Intenta revisando el siguiente documento para que puedas darte una idea de como llevarlo acabo.
Borrarhttps://numbertext.contributor.pw/
ResponderBorrarExcelente, ya sacaron un complemento... Lo malo es que esta en ingles. Quizás envolviendo el resultado de esa función dentro de la función GOOGLETRANSLATE.
BorrarHola Luis, muchas gracias por los ejemplo. Tu sabes si exista una alternativa para numeros mayores, como por ejemplo de billones? ya que la alternativa #2 no funciona con mas de 100 millones. Gracias nuevamente!!
ResponderBorrarMe temo que no! En todo caso tendrías que hacer uso de Google Apps Script para programar una función personalizada para cantidades como las que necesitas. Saludos.
BorrarHola
ResponderBorrarHan encontrado alguna alternativa para convertir también con decimales, por ejemplo 5483.76??
Antes que nada, muchas gracias, me salvaste mucho tiempo.
ResponderBorrarY aquí hay una solución para el formato que se usa en cheques, contratos, etcétera. (por ejemplo, $6,735.00 M.N. (SEIS MIL SETECIENTOS TREINTA Y CINCO PESOS 00/100 M.N.))
La formula/función es (nada mas sustituyes N2, por la celda que ocupas):
=(CONCATENAR((TEXTO(N2,"$0,000.00"))," M.N. (",MAYUSC(INDICE(IMPORTXML("https://www.buscapalabra.com/numeros-a-letras.html?cifra="&(REDONDEAR.MENOS(N2)),"//li[1]//strong"),1)),"PESOS ",((TEXTO((((REDONDEAR((N2-(REDONDEAR.MENOS(N2))),2))*100)),"00"))),"/100 M.N.)"))
Muchas gracias por tu aportación Francisco Mendoza, la cual será de utilidad. Saludos!
BorrarMuchas gracias Francisco Mendoza por tu aporte lo necesitaba para moneda nacional y quedo de perla saludos desde tabasco, México
BorrarHOLA BUENAS NOCHES, HE LEIDO Y ANALIZADO TODAS Y CADA UNA DE LAS APORTACIONES; SIN EMBARGO QUISIERA PREGUNTARLES NUEVAMENTE SI ES FACTIBLE HACER LA CONVERSION DE NUMEROS A LETRAS LITERAL CON CENTAVOS Y DEMAS, TAL CUAL COMO DEBE IR EN LOS CHEQUES. MUCHAS GRACIAS POR SUS RESPUESTAS DE ANTEMANO
ResponderBorrarTe recomiendo que antes de formular una pregunta revises los comentarios y agotes todas las posibilidades. Hay un comentario de Francisco Mendoza que quizás pudiera serte de ayuda. Revisalo y nos cuentas. Saludos.
BorrarSería así en mi país: =CONCATENATE(UPPER(INDEX(IMPORTXML("https://www.buscapalabra.com/numeros-a-letras.html?cifra="&(ROUNDDOWN(E25));"//li[1]//strong");1));" ";((TEXT((((ROUND((E25-(ROUNDDOWN(E25)));2))*100));"00")));"/100 BOLIVIANOS")
BorrarHola! Muchas gracias por tu aportación, estoy seguro que a algunos será de utilidad. Saludos.
BorrarPor algun motivo al copiar la formula, tal cual, me sale "Formula Parse error"
ResponderBorrarHola! Me es imposible darte una respuesta sin poder acceder a una copia de tu documento para revisar y dictaminar el error. Saludos.
BorrarMuchas gracias la información es muy útil y valiosa
ResponderBorrarHola Hugo! Me alegra que te haya sido de utilidad. Saludos.
Borrarno me sale:(
ResponderBorrarYa descargaste la plantilla de ejemplo?
ResponderBorrarMuchas gracias!
ResponderBorrarPara la moneda colombiana funciona perfecto así....
=CONCATENAR(MAYUSC(INDICE(IMPORTXML("https://www.buscapalabra.com/numeros-a-letras.html?cifra="&(REDONDEAR.MENOS(T9));"//li[1]//strong");1));" PESOS EXACTOS")
Muchas gracias por tu aportación! Saludos!
Borrarbuen dia
ResponderBorrarcuanto el valor es el resultado de una formula por que no lo toma
Debería de hacerlo. Ya descargaste el archivo de ejemplo donse se muestran varias alternativas, una de ellas es:
Borrar=INDICE(IMPORTXML("https://www.buscapalabra.com/numeros-a-letras.html?cifra="&B1,"//li[1]//strong"),1)
En este caso B1 es el resultado de utilizar la función SUMA en un rango de celdas!