miércoles, abril 18, 2007

Como convertir números en palabras en Excel en Español

Un compañero de trabajo me preguntó si había alguna función en Excel para convertir números a palabras(expresar los números en letras). Es decir, si el la celda A1 pongo 123,45 en la celda B1 donde pongo la función aparece "ciento veintitrés pesos con cuarenta y cinco centavos". Una rápida búsqueda en Google me llevó a está página de la base de datos de conocimientos de Microsoft sobre Cómo convertir un valor numérico en palabras en Excel en inglés que es una traducción automática del articulo How to convert a numeric value into English words in Excel.
Esta UDF (user defined function = función definida por el usuario) de Microsoft tiene varios problemas:
1 – sólo sirve para convertir números al inglés
2 – sólo usa el dólar como moneda
3 – sólo usa el punto como separador de decimales.

Para adaptar esta función a los usuarios de Excel en español, tuve que introducir varios cambios. Por ejemplo, en la mayoría de los países hispano parlantes se usa la coma como separador de decimales. Pero en Guatemala, Honduras, República Dominicana, México, Nicaragua, Puerto Rico y El Salvador, se usa el punto, como en los Estados Unidos.
También la moneda cambia de acuerdo al país.

Aquí pueden descargar una adaptación de la función para convertir números al español, que toma en cuenta todos estos problemas.



Para usarla hay que copiar el código de la función a un módulo del editor de Vba, por ejemplo en el Personal.xls. Luego podemos usar el asistente de funciones,




Esta versión de la función tiene tres argumentos, la celda que contiene el número (MyNumber), el separador (Sep) y la moneda (Mon)



El resultado:




Technorati Tags:

37 comentarios:

  1. Estimado Jorge: Probé la rutina de "número en letras". En el caso de "mil" es lo mismo 1 mil que 454 mil, pero no así en millon. 1 millón es correcto pero 123 millón no... Estaría bueno modificar para el caso de más de un millon. Un saludo y gracias por la atención

    ResponderBorrar
  2. Gracias por la observación. Será corregido.

    ResponderBorrar
  3. Cumplido! La versión corregida se descargar de esta nota

    ResponderBorrar
  4. Hola Jorge, cuando los decimales son números enteros, por ejemplo; 1,40 el resultado es UN PESO CON CUARENTA Y CENTAVOS,dejando la letra " y " , excepto para ",10" y ",20", que el resultado es correcto.
    Enhorabuena por este excelente trabajo

    ResponderBorrar
  5. Gracias por la observación. Tambien esto ha sido corregido.

    ResponderBorrar
  6. muchas gracias jorge por éste laburo.

    ResponderBorrar
  7. Hola Jorge,
    estoy utilizando la funcion para convertir numeros a letras pero no consigo que redondee los decimales cuando utilizo otras operaciones.
    ej 109,295.65+109,295.65*1.15= 125,689.998 = 125,690
    cuando se convierte a letra queda asi: "ciento veinticinco mil seiscientos ochenta y ocho pesos 99/100 mn).
    No consigo que quede: "ciento noventa y cinco mil seiscientos noventa"
    agradeceria que me pudieras ayudar.
    Gracias

    ResponderBorrar
  8. Hola,
    ten en cuenta que lo que ves en la pantalla no es lo que Excel ve. Si haces la operación 109295.65*1.15 el resultado que ve Excel es 125689,9975. Lo que ves en la pantalla depende del formato de la celda, pero el resultado no cambia. Por eso la función te da como resultado 125689,99.
    Para obtener el resultado deseado tendrías que usar primero alguna de las funciones de redondeo.

    ResponderBorrar
  9. HOLA A TODOS, DESEO QUE ME PUEDAN AYUDAR A VER EL CODIGO QUE MENCIONA ANONIMO AMI SI ME INTERESARIA COMO TE LO DESGLOSA DE ESTA MANERA 125,688.99 (ciento veinticinco mil seiscientos ochenta y ocho pesos 99/100 mn). HOJALA PUEDAN AYUDARME, SE LOS AGRADECERIA MUCHO

    ResponderBorrar
  10. hola a todos, disculpen la molestia, realice el ejemplo que publican en este foro, pero no me muestra los datos como me podrian ser utilies ya que pongo 2,880.55 y me desglosa dos millones ochocientos ochenta y ocho mil cincuenta y cinco pesos cero centavos, habra una formula para que me desglose dos mil ochocientos ochenta pesos 55/100 mn como lo menciona el mensaje de anonimo arriba escrito, espero me puedan ayudar y no causarles tantas molestias, por su atencion gracias

    ResponderBorrar
  11. Hola,

    la macro mencionada está en esta nota.
    Una versión más compacta y flexible puedes ver en esta nota más reciente.

    ResponderBorrar
  12. Hola Anónimo,
    supongo que eres la misma persona del comentario anterior.
    Como menciono en la nota, en algunos paises se usa la coma como separador de miles y en otros el punto. Si tu sistema esta montado con el punto como separador (como en la Argentina) y usas la coma recibirás ese resultado.
    Para solucionar este problema he agregado la variable Sep.
    Y me permito dos observaciones a todos:
    - este no es un foro, sino un blog. Como herramienta de consulta es mucho más limitado que un foro.
    - Sería bueno que nos presentemos con nombres, aún cuando no sean nuestros nombres auténticos. Es más agradanle responder a "Juanito" que a Anónimo.

    ResponderBorrar
  13. NO PUDE INSTALAR LA FUNCION EN EXCEL REALMENTE NECESITO UNA PEQUEÑA EXPLICACION DE COMO SE DEBE HACER GRACIAS QUE PENA TAN MOLESTIA

    ResponderBorrar
  14. QUE PENA NO PUDE INSTALAR LA FUNCION EN EXCEL NECESITO UNA PEQUEÑA EXPLICACION GRACIAS

    ResponderBorrar
  15. Hola, no es molestia y está explicado en el cuerpo de la nota.
    Tienes que copiar el código de la función en un módulo del editor de Vb. Si necesitas un explicación más detallada ponte en contacto conmigo por mail a jorgedun@gmail.com.

    ResponderBorrar
  16. Hola, gracias por este dato me salvo el pellojo pero aun hay un problemita, cuando pones el monto de 958.60 en literal te escribe como nueve cientos cincuenta y ocho 60/100, lo mismo pasa con 758.60
    Gracias por tu tiempo

    Saludos

    ResponderBorrar
  17. Hola Omar

    tienes que usar la versión corregida o la versión para México.
    En breve estaré publicando una versión corregida y ampliada que me ha envíado uno de mis lectores.

    ResponderBorrar
  18. Muy agradecido por todo su aporte en excel.

    ResponderBorrar
  19. Estimado Jorge:

    Mi nombre es Beatriz Quintana, soy mexicana y antes que nada te felicito por tus conocimientos y sobre todo por la forma en que los transmites a través de tus ejemplos, llevo consultando tu blog desde hace un año porque ha sido de mucha utilidad en mi trabajo, no había tenido necesidad de escribirte, porque prácticamente todas mis dudas se han resuelto con las preguntas que te hacen, pero en esta ocasión no pude ejecutar la macro para la conversión de números a letras que adaptó Javier Reséndiz, no soy experta en excel y tal vez la solución es muy obvia, pero desconozco mucho sobre todo de macros, por lo mismo solicito tu ayuda, resulta que cuando escribo la fórmula en la celda con el ejemplo que hiciste en tu blog me aparece un recuadro con la leyenda "Error de Sintaxis" y marca la palabra "Attribute".

    De antemano agradezco tu atención y quedo en espera de tu respuesta.

    Buen día.

    ResponderBorrar
  20. Hola Beatriz

    tienes que borrar la primer línea del código

    Attribute VB_Name = "Módulo1"

    Este línea es innecesaria y por un descuido no la borré cuando subí el archivo.

    Gracias por leer el blog.

    ResponderBorrar
  21. jorge:

    probe la formula y funciona excelente. hora una consulta, como hago para que lo escriba en minusculas.

    gracias.
    Pablo

    ResponderBorrar
  22. El camino más fácil es combinaarla con la función MINUSC (=MINUSC(SpellNumber2(A1,".","pesos")).
    También se podría modificar el código de la función.

    ResponderBorrar
  23. muchas gracias! se agradece que compartas tus conocimientos y si te hacen observaciones mejores el codigo, una compañera tenia que hacer la rutina pero con tu ayuda pudo seguir en la siguente labor.

    un saludo!

    ResponderBorrar
  24. Hola,

    Muchas Gracias!! me sirvio bastante, justo necesitaba algo asi para automatizar unas facturas.-


    nuevamente Gracias!!!

    ResponderBorrar
  25. Hola Jorge, mi nombre es Ricardo Boudon y resido en Santiago de Chile, en primer lugar quiero felicitarte por tu muy buena disposición a solucionar las inquietudes que podamos tener y hacernos más fácil el poder comprender Excel.
    Como tu bien sabrás en mi país no se suele hablar de centavos, es por este motivo que me gustaría me expliques que debo hacer para que la cifra termine solamente en pesos y no indique los centavos, Ej. 12.000.000 expresa doce millones de pesos con cero centavos y necesito que solo diga doce millones de pesos.

    Agradezco tu atención y quedo en espera de tu respuesta.

    ResponderBorrar
  26. Esta versión de la función te permite expresar los números sin centavos (el argumento es opcional)

    ResponderBorrar
  27. excelente tu contribucion; con la version que baje del 21/04/2009 21:54 horas no me sale el DE PESOS; pero me sale en minúsculas y las necesito en mayusculas los nombres en letras de los numeros . ¿Tenes alguna alternativa así?Desde ya muchas gracias
    carlos

    ResponderBorrar
  28. GRACIAS; LE PUSE MAYUSC A LA FORMULA Y SALE EN MAYUSCULA; EXCELENTE LO QUE HICISTE; TE EMPIEZO A SEGUIR DESDE HOY.-
    CARLOS

    ResponderBorrar
  29. Jorge:

    Mi nombre es Denisa, tus comentarios estan super buenos, pero yo tengo un problema, no uso decimales y lo unico que consigo es que salga es que para 264197.- pesos, salga
    Dos Mil Sesenta Siete Mil Uno Mil Noventa Seis Pesos. no tenia la base de VB asi que copie la que sale para ingles y la he modificado pero aun no consigo que resulte correctamente, me gustaria que me ayudaras gracias y estan super buenos tus estudios

    ResponderBorrar
  30. Denisa,

    te sugiero descargar el código (acabo de renovar el enlace) y copiarlo en el libro Personal. Para obtener el resultado adecuado tienes que usar separadores de miles (punto o coma, lo que se use en tu país) o poner "" como argumento para el separador.

    ResponderBorrar
  31. Hola Jorge, mi nombre es Hector de Mty. México, la pregunta es la versión para Mexico del convertidor de números a palabras para que versión de excel es?

    ResponderBorrar
  32. Hector,
    no lo he probado pero debe funcionar con todas las versiones de Excel a partir de Excel 97.

    ResponderBorrar
  33. hola, soy un nuevo seguidor,colombia, al aplicar la rutina de la formula, me sala el mensaje:

    error de compilacion
    se esperaba end function

    agradezco la ayuda

    ResponderBorrar
  34. Fijate si has copiado todo el código.

    ResponderBorrar
  35. Muchas gracias por el laburo, me vino al pelo.

    Saludos, Juan Manuel

    ResponderBorrar
  36. Y si solamente necesito que me convierta número con decimal a letras?
    Por ejemplo:
    5.1
    (Cinco punto uno)
    Gracias

    ResponderBorrar
  37. De la misma manera, aplicando la función

    ResponderBorrar

Nota: sólo los miembros de este blog pueden publicar comentarios.