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: MS Excel
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
ResponderBorrarGracias por la observación. Será corregido.
ResponderBorrarCumplido! La versión corregida se descargar de esta nota
ResponderBorrarHola 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.
ResponderBorrarEnhorabuena por este excelente trabajo
Gracias por la observación. Tambien esto ha sido corregido.
ResponderBorrarmuchas gracias jorge por éste laburo.
ResponderBorrarHola Jorge,
ResponderBorrarestoy 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
Hola,
ResponderBorrarten 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.
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
ResponderBorrarhola 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
ResponderBorrarHola,
ResponderBorrarla macro mencionada está en esta nota.
Una versión más compacta y flexible puedes ver en esta nota más reciente.
Hola Anónimo,
ResponderBorrarsupongo 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.
NO PUDE INSTALAR LA FUNCION EN EXCEL REALMENTE NECESITO UNA PEQUEÑA EXPLICACION DE COMO SE DEBE HACER GRACIAS QUE PENA TAN MOLESTIA
ResponderBorrarQUE PENA NO PUDE INSTALAR LA FUNCION EN EXCEL NECESITO UNA PEQUEÑA EXPLICACION GRACIAS
ResponderBorrarHola, no es molestia y está explicado en el cuerpo de la nota.
ResponderBorrarTienes 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.
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
ResponderBorrarGracias por tu tiempo
Saludos
Hola Omar
ResponderBorrartienes 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.
Muy agradecido por todo su aporte en excel.
ResponderBorrarEstimado Jorge:
ResponderBorrarMi 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.
Hola Beatriz
ResponderBorrartienes 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.
jorge:
ResponderBorrarprobe la formula y funciona excelente. hora una consulta, como hago para que lo escriba en minusculas.
gracias.
Pablo
El camino más fácil es combinaarla con la función MINUSC (=MINUSC(SpellNumber2(A1,".","pesos")).
ResponderBorrarTambién se podría modificar el código de la función.
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.
ResponderBorrarun saludo!
Hola,
ResponderBorrarMuchas Gracias!! me sirvio bastante, justo necesitaba algo asi para automatizar unas facturas.-
nuevamente Gracias!!!
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.
ResponderBorrarComo 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.
Esta versión de la función te permite expresar los números sin centavos (el argumento es opcional)
ResponderBorrarexcelente 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
ResponderBorrarcarlos
GRACIAS; LE PUSE MAYUSC A LA FORMULA Y SALE EN MAYUSCULA; EXCELENTE LO QUE HICISTE; TE EMPIEZO A SEGUIR DESDE HOY.-
ResponderBorrarCARLOS
Jorge:
ResponderBorrarMi 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
Denisa,
ResponderBorrarte 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.
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?
ResponderBorrarHector,
ResponderBorrarno lo he probado pero debe funcionar con todas las versiones de Excel a partir de Excel 97.
hola, soy un nuevo seguidor,colombia, al aplicar la rutina de la formula, me sala el mensaje:
ResponderBorrarerror de compilacion
se esperaba end function
agradezco la ayuda
Fijate si has copiado todo el código.
ResponderBorrarMuchas gracias por el laburo, me vino al pelo.
ResponderBorrarSaludos, Juan Manuel
Y si solamente necesito que me convierta número con decimal a letras?
ResponderBorrarPor ejemplo:
5.1
(Cinco punto uno)
Gracias
De la misma manera, aplicando la función
ResponderBorrar