Convertir de números a letras en Sheets

¿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:
  1. IMPORTXML
  2. GOOGLETRANSLATE
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:




Comentarios

  1. Excelente post, muchos éxitos!

    ResponderBorrar
  2. Está 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:
    Nú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

    ResponderBorrar
    Respuestas
    1. Hola wuarbuz! Gracias por comentar...

      Efectivamente 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!

      Borrar
  3. Han podido resolver el problema con https://numeros-a-letras.todala.info/???

    ResponderBorrar
  4. GUAUU increiblemente itul! Gracias mil

    ResponderBorrar
  5. Aqui esta una alternativa corregida.

    =UPPER(GOOGLETRANSLATE(IMPORTXML("https://www.buscapalabra.com/numeros-a-letras.html?cifra="&B1,"//li[1]//strong"),"en","es"))

    ResponderBorrar
    Respuestas
    1. 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:

      =IMPORTXML("https://www.buscapalabra.com/numeros-a-letras.html?cifra="&B1,"//li[1]//strong")

      Borrar
    2. Muchisimas Gracias !!!!! funciona perfecto !

      Borrar
  6. Hola, directo al español de una :

    =IMPORTXML("https://www.lemoda.net/tools/spanish-numbers/index.cgi?number="&A1;"//p[2]")

    ResponderBorrar
    Respuestas
    1. Excelente magnifico aporte! Ya lo agregue al documento de ejemplo. Ya tenemos tres alternativas! Gracias.

      Borrar
    2. CRACKKKKK FUE LA UNICA QUE ME FUNCIONOOOO

      Borrar
    3. Excelente 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!!!

      Borrar
    4. Hola, 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"
      Como se lo soluciona ?

      Borrar
  7. Respuestas
    1. Hola Julio Cesar! que bueno que te haya sido de utilidad. Espero seguir publicando post que puedan serlo también. Saludos!

      Borrar
  8. Muchas gracias, me ayudaron con lo más difícil de mi trabajo.

    Felicitaciones

    ResponderBorrar
    Respuestas
    1. Hola! Que bueno que te haya sido de utilidad. Espero seguir publicando post que puedan serlo también. Saludos!

      Borrar
  9. Hola! cuando el numero en la celda es producto de una formula no me reconoce el numero, eso tiene solución?

    ResponderBorrar
    Respuestas
    1. Hola 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.

      Saludos.

      Borrar
  10. servicor caido, no traduce desde =IMPORTXML("https://www.lemoda.net/tools/numbers/index.es.cgi?number=10546","//p[3]") me sale #N/A

    ResponderBorrar
    Respuestas
    1. En 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)

      Borrar
  11. EL LINK DE EJEMPLO TAMBIEN NO TRADUCE DE NUMERO A LETRAS ..https://docs.google.com/spreadsheets/d/1mLunYST0qT29PRtWXTf8DLtmXo02XVt9d1tIce8PwSs/edit#gid=1844974892

    ResponderBorrar
  12. Hola, 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.
    Como se soluciona ese incionveniente ?

    ResponderBorrar
    Respuestas
    1. Por favor lee los comentarios previos... Ya he dado respuesta a este problema:
      En 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)

      Borrar
  13. 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)
    pero me aparece ERROR aparte de cambiar el B1 correspondiente a la celda que necesito, debo cambiar algún otro valor? Muchas gracias

    ResponderBorrar
    Respuestas
    1. Revisa el siguiente ejemplo:
      https://docs.google.com/spreadsheets/d/1mLunYST0qT29PRtWXTf8DLtmXo02XVt9d1tIce8PwSs/edit#gid=986090852

      A mi me esta funcionando.

      Borrar
    2. 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í:

      =INDICE(IMPORTXML("https://www.buscapalabra.com/numeros-a-letras.html?cifra="&B1;"//li[1]//strong");1)

      Borrar
    3. 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.

      Borrar
  14. Holaaa... 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.

    ResponderBorrar
    Respuestas
    1. Siento 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.

      Borrar
  15. https://numbertext.contributor.pw/

    ResponderBorrar
    Respuestas
    1. Excelente, 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.

      Borrar
  16. Hola 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!!

    ResponderBorrar
    Respuestas
    1. Me 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.

      Borrar
  17. Hola
    Han encontrado alguna alternativa para convertir también con decimales, por ejemplo 5483.76??

    ResponderBorrar
  18. Antes que nada, muchas gracias, me salvaste mucho tiempo.

    Y 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.)"))

    ResponderBorrar
    Respuestas
    1. Muchas gracias por tu aportación Francisco Mendoza, la cual será de utilidad. Saludos!

      Borrar
    2. Muchas gracias Francisco Mendoza por tu aporte lo necesitaba para moneda nacional y quedo de perla saludos desde tabasco, México

      Borrar
  19. HOLA 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

    ResponderBorrar
    Respuestas
    1. Te 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.

      Borrar
    2. Serí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")

      Borrar
    3. Hola! Muchas gracias por tu aportación, estoy seguro que a algunos será de utilidad. Saludos.

      Borrar
  20. Por algun motivo al copiar la formula, tal cual, me sale "Formula Parse error"

    ResponderBorrar
    Respuestas
    1. Hola! Me es imposible darte una respuesta sin poder acceder a una copia de tu documento para revisar y dictaminar el error. Saludos.

      Borrar
  21. Muchas gracias la información es muy útil y valiosa

    ResponderBorrar
  22. Muchas gracias!

    Para 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")

    ResponderBorrar
  23. buen dia
    cuanto el valor es el resultado de una formula por que no lo toma

    ResponderBorrar
    Respuestas
    1. Debería de hacerlo. Ya descargaste el archivo de ejemplo donse se muestran varias alternativas, una de ellas es:
      =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!

      Borrar

Publicar un comentario