En realidad hace tiempo que vienen consultándome sobre esto... quizás cinco o seis años. Debe ser una de las funciones mas buscadas de Excel, por lejos: la posibilidad de escribir: 1.534,63 y que en una celda aparezca magicamente "un mil quinientos treinta y cuatro c/15/100". Aquí les dejo una solución, basada en funciones, sin utilizar macros, la cual preparé exclusivamente para este Blog. A pesar de los millones de usuarios que requieren esta herramienta, no viene incorporada en Excel, debemos armarla nosotros mismos.
Luego de la imagen irá la explicación de como llegué a lograr esto, dado que es un proceso medianamente complejo, que utiliza tres o cuatro funciones básicas y requiere de varios pasos.
así quedará nuestra planilla y siempre devolverá en letras el valor que ingresemos en A1
Desde ya aclaro: esta no es "la forma" de hacerlo, simplemente es una mas, evitando el uso de macros. Sobre esta base, comencemos:
1) El número en cuestión será introducido en A1 y deberemos "descomponerlo", para lograr la identificación de las unidades, centenas y decenas de miles y de millones; este ejemplo abarca hasta la suma de 999.999.999,99 (novecientos noventa y nueve millones novecientos noventa y nueve mil novecientos noventa y nueve con 99 centavos... bastante lógico y común para la mayoría de las empresas.... y hogares. =)
2) Para lograr la descomposición del número tenemos que tener en cuenta la forma en que escribimos, es decir, la sintaxis común y corriente de todos los días, que utilizamos para nombrar/escribir numeros:
Ejemplos:
- 125: ciento / veinticinco
- 10.423: diez mil / cuatrocientos / veintitres
- 248.796: doscientos / cuarenta y ocho mil / setecientos / noventa y seis
y así sucesivamente. El número deberá ser descompuesto de la manera arriba expresada, en donde cada "nueva unidad" se encuentra coloreada.
3) Vamos a tener que escribir un poco (no se hagan problemas... al final del post les dejo el link al archivo), ya que esto no tiene nada de "magico" y todos los números involucrados deberán estar en nuestro libro:
tres tablas: cientos, unidades y decenas (la verde, que obviamente llega hasta el 99) y una tercera, para tratar al muy problemático tema del 1.
4) Una vez que el paso anterior está listo, procederemos a utilizar la función:
=RESIDUO(numero, numero_divisor)
que tiene la particularidad de devolvernos el resto de una división, como por ejemplo: 10%3=3 resto: 1.
Con dicha funcion, y algunas sumas y restas, logramos lo siguiente:
ya empezamos a descomponer nuestro número. a los centavos, los vemos a lo último.
Las funciones utilizadas son, partiendo desde A3 hasta A5, respectivamente:
=(RESIDUO(A1;1000000000)-RESIDUO(A1;1000000))/1000000
=ENTERO((RESIDUO(A1;1000000)-A5)/1000)
=ENTERO(RESIDUO(A1;1000))
Con RESIDUO, restas y divisiones logro el primer objetivo.
5) En otras dos columnas pondremos el ordenamiento indicado en el punto 2. Esto sería el "como pronunciamos" el numero presente en A1:
al margen de mi exquisito mal gusto para los colores, notarán como ahora en las columnas tengo: 2 / 6 / 65 / 7 / 24 - dos millones / seiscientos / sesenta y cinco mil / setecientos / veinticuatro.
Lograr lo obtenido en la imagen anterior es muy sencillo: divisiones y, nuevamente, RESIDUO. Podrán visualizar dichas funciones en el archivo que les dejo al final del post.
6) Recordarán que en el punto 3 armamos tablas: numeros con sus respectivos nombres... bueno, llegó el momento de utilizarlas. Lo mas complicado de todo ya está realizado; de ahora en mas nos manejaremos con las funciones SI() y BUSCARV(). Exacto, adivinaron: a cada numero generado en las columnas B y C los buscaremos en las tablas del punto 3 y retornaremos sus respectivos nombres, quedando:
Para comprender el por qué de tantas funciones y demás que siguen a continuación, es fundamental darse cuenta de un número muy problemático a la hora de "traducirlo": el 1. Si, el 1, tan chiquito y tan jodido.
Si el usuario ingresa 22000 es sencillo, busco el 22 y listo. Pero si ingresa 21000 y lo busco... me devolvería, erróneamente, "veintiuno mil". ¿Se entiende? Y como estas, muchas otras variantes de mi amado 1, que no las expongo para no aburrir y extenderme demasiado en el tema.
7) Analicemos una de las funciones, ya que practicamente todas poseen la misma lógica:
Unidad de millón: =SI(C3>0;SI(RESIDUO(C3;10)=1;BUSCARV(C3;tablas!$G$1:$H$10;2;0);BUSCARV(C3;tablas!$D$1:$E$99;2;0));"")
traduciendo: si el residuo de C3 es igual a 1, lo busco en la tercer tabla creada; si no, lo busco en la segunda.
muy fácil y práctico. las demás están disponibles en el libro adjunto y podrán estudiarlas tranquilamente.
8) Nos queda agregar el "millon", "millones", "mil", etc., tarea que realizamos en la columna G:
aqui tambien deberemos tener cuidado con el 1.
9) Utilizaremos la función CONCATENAR(valor1, valor2, valorN) para unir en "una sola frase" los resultados del rango E3:G5
=SI(A1<>"";CONCATENAR(E3;" ";F3;G3;" ";E4;" ";F4;G4;" ";E5;" ";F5)&" c/"&TEXTO(C6;"00")&" ctvos";"")
Observen que entre cada "frase" creada concateno un espacio en blanco (" "). Luego de concatenar con dicha función, hago uso del signo & (ampersand) para anexar la función TEXTO(). Cabe aclarar, para aquellos que no lo sepan, que & es igual a CONCATENAR(); surte el mismo efecto: unir.
Notarán que a los centavos los encierro en la funcion:
=TEXTO(valor, formato)
sobre el segundo argumento (formato) les sugiero que consulten a la ayuda en Excel, ya que existen una amplia gama de estructuras predefinidas que darán un formato en especial a nuestro número. Noten como quedaría el resultado sin TEXTO():
mmmm.... definitivamente no es algo que quisiéramos en nuestra planilla.
Si alguien tiene alguna consulta o duda sobre TEXTO(), será bienvenida, pero no es el tema central de este post, y no quisiera extenderlo mucho mas.
Ahora agregaremos una nueva hoja al libro (ya la tienen en el ejemplo que les dejo) y haremos que esto sea funcional, por ejemplo en observar los resultados en un formulario o factura:
a Dios gracias que el pan de cada día no depende de mis habilidades con el diseño. Mas allá de eso, todo valor reflejado en TOTAL será correctamente llevado a "letras", olvidándonos de actualizar este dato manualmente.
Aquí les dejo el link al archivo.
Espero que les sirva.
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Etiquetas
Funciones
Etiquetas:
Funciones
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
21000 con letra
ResponderEliminarno entiendo el comentario. si en la factura del ejemplo pongo: 21000
ResponderEliminardebajo aparece: "veintiun mil". como debe ser.
Quisiera saber como hacer para convertir los centavos en letras tambien.
ResponderEliminarel tema viene así: supongamos que tenes 145,83 en A1. la forma mas sencilla es: pones en B1
ResponderEliminar=(A1-ENTERO(A1))*100
es decir: solo te quedarían los centavos y lo multiplicas por 100 para lograr un numero entero, sin decimales. En este caso, quedaría 83.
Ya tenes los centavos identificados.
En la columna D del archivo del ejemplo estan todos los numeros, del 1 al 99. Tomás ese 83 logrado en el punto anterior y haces (en cualquier celda):
=Buscarv(B1, D1:E100, 2, FALSO)
Y listo, deberías tener esos 83 centavos en letras, en la celda donde introdujiste la función Buscarv().
Probá y avisame, si no te llega a salir te modifico el libro original y te lo paso x mail.
gracias x tu mensaje.
¡¡¡ SOS UN GENIO !!! Gracias por compartir !
ResponderEliminarGracias Mabel, es una alegría saber que te ha servido.
ResponderEliminar