Numeros a Letras sin Macros

 Click en la imagen para agrandarla

Hola! Este ha sido uno de los mayores retos que nos hemos propuesto. Se puede hacer una función mediante Macros, de hecho si googlean, podrán encontrar como entrar al editor de VBA, pegar el código y llamar a la nueva fórmula.
Pero para los lectores habituales, y para los que no, les contamos: uno de nuestros objetivos es no usar Macros, para ejercitar la materia gris y porque los Macros, por un tema de seguridad, no resultan amigables al usuario de excel.

Bien, vamos al link de la planilla:

DESCARGAR Planilla Numeros a Letras Sin Macro


Modo de utilizar esta planilla: 

Básicamente, y para quién no le interese el "detrás de escena", van a poner un número en alguna celda de la columna B, y en la misma fila de esa celda de la columna C, saldrá el valor en letra (el número tiene que ser menor a 1.000.000).

Veamos un ejemplo de utilización práctico: Supongamos que tienen una planilla con recibos en la hoja "Hoja1" en donde el total está en M18 y quieren que el importe en letras salga en M19. Mueven la planilla "NumALetras" del archivo que bajan de acá arriba (con las 2 planillas excel abiertas -la del recibo y esta-, click derecho sobre el nombre de la hoja "NumALetras", "Mover o copiar", eligen el libro previamente abierto en donde está el recibo, marcan "Crear una copia" y aceptar).
Ahora, en su planilla, van a tener la hoja "NumALetras"y la "Hoja1" donde está su recibo.

En B5 de "NumALetras", hacen referencia a M18 de la hoja de cálculo donde está el recibo ("Hoja1" era en el ejemplo). En B5 de "Numaletras" ponemos:
=Hoja1!M18

Y en la hoja del recibo "Hoja1", en la celda M19, hacen referencia a C5 (que es donde está el número en letras). En M19 de "Hoja1" ponemos:
=NumALetras!C5

Entonces, cada vez que se modifique M18, se modificará M19 (Excel hace lo siguiente: lleva M18 a B5, lo transforma a letras, y lo muestra en M19).


Si te interesa saber como funciona:

Sabemos que de 10 personas, 9 bajan la planilla y 1 intenta descubrir el funcionamiento de las cosas. Y no está mal. Pero como alguna vez fuimos ese "1" y hubo gente que con paciencia nos explicó como funcionaban las cosas y hoy podemos estar acá compartiendo conocimientos, vamos a invertir ese tiempo en explicar como llegamos a que, poniendo un número, nos devuelva ese número en letras.

La planilla va a devolver en letras un número POSITIVO menor a 999.999,00 (no pusimos millones, pero si entendés el funcionamiento, lo podés agregar). También pusimos el texto previo (por ejemplo "Son Pesos"), pero si esto lo tiene tu recibo preimpreso o tu recibo hecho en excel, podés dejarlo en blanco. Al principio de la entrada, podés ver masomenos como funciona la cosa.

Como a nosotros nos gusta, no nos apropiamos del trabajo ajeno como hace otra gente. La idea madre de esto, viene del siguiente link:
http://www.forosdelweb.com/f90/numero-letra-sin-macro-497675/
del usuario Abahamvj de ese foro, y aunque sea un post del 2007, los créditos son de él, y nuestro agradecimiento también.
En la misma, se había hecho una fórmula para números del 1 al 999. La adaptamos para llegar al 999.999 e incluímos centavos.

Manos a la obra!

 Click en la imagen para agrandarla

Estas columnas al finalizar las vamos a ocultar. Para analizar el número que está en B5 con formato numérico, vamos a darle un formato de texto para luego analizar parte por parte (miles, cientos y centavos). El formato es "#0,00". La fórmula de la columna E solo dice que si el úmero es mayor a 999.999,99, me ponga un texto de "0,00". Sino, el formato que pedimos. Para ver más acerca de como funciona TEXTO, hacé clic acá.




 ANALIZANDO LOS MILES

Ya tenemos nuestro número en texto con un largo determinado. Sabemos que siempre nuestros primeros 3 caracteres (si existen) van a tener los "miles" ("mil", "ciento veintitres mi", "cuatroscientos ochenta mil", etc).

 Click en la imagen para agrandarla

Vamos a analizar las columnas F y G. En F:
=SI(LARGO(E5)>6;EXTRAE(E5;1;LARGO(E5)-6);"")
Si el largo del número formateado en E5 es mayor a 6 (los 3 espacios de los cientos + la coma + los decimales), entonces vamos a tener miles. Así que si se da esto, extraemos de E5, desde la posición 1, la cantidad de caracteres del largo de E5 menos 6.
Ejemplos para que lo entiendas:
- Si tengo 1235,00, extrae 1: desde la posición 1 hasta la posición 1 (7, que es el largo de 1235,00, menos 6)
- Si tengo 14000,00, extrae 14: desde la posición 1 hasta la posición 2 (8, que es el largo de 14000,00, menos 6)
Y esto es razonable: si quiero poner en letras 14145,  tengo que analizar primero el 14 para poner "CATORCE MIL ciento cuarenta y cinco".

Antes de seguir, si no entendés la función SI, te recomendamos que hagas click acá, y que la practiques varias veces. Porque el 90% de lo que viene, hace referencia a esa función.

Ahora, a la parte heavy: poner ese 14 como CATORCE MIL:

 Click en la imagen para agrandarla

Bueno, al agrandar esta imágen, después de acordarte de nuestras madres y otros familiares, te pedimos que no te vayas al final bajando los brazos. Te prometemos que vamos a explicar paso a paso que es lo que hace esta fórmula, y vas a ver que es más sencilla de lo que parece.

 Click en la imagen para agrandarla

Fijate en la imagen de arriba. Si el valor de la columna F, la que nos dice los miles, es cadena vacía (no hay miles, por ejemplo 231,00 no tiene miles), dejamos cadena vacía. Si no, volvemos a anidar otro SI preguntando si el valor de F5 es 1 (preguntamos si el valor, ya que acordate que estamos trabajando con el número en TEXTO), ponemos mil. Si tampoco se da esa condición, viene todo lo que está en amarillo. Perfecto. Vamos a analizar eso:
 Click en la imagen para agrandarla

Bueno, separamos todo lo que está en amarillo, dandole tabulación (en programación se utiliza mucho), para entender un poco más todo esto.
En principio, lo que está en verde analiza los "cientos" de los "miles": en 125, el "1" serían los cientos. Y el resto (amarillo, rosa, rojo y gris), analiza los números del 1 al 99. En 125, analiza el 25.

Empecemos con lo verde, siempre recordando que estamos con los 3 números de los miles de nuestro número original.



SI(LARGO(F5)<3;
         "";
        ELEGIR(IZQUIERDA(DERECHA(F5;3);1)+1;"";SI(DERECHA(F5;2)="00";"cien ";"ciento ");
                          "doscientos ";"trescientos ";"cuatroscientos ";"quinientos ";"seiscientos
                          ";"setecientos ";"ochocientos ";"novecientos ")
)



Si el largo es menor a 3, nada tenemos que hacer, es cadena vacía. En el número 25000, no hay "ciento" ni "doscientos" ni nada de eso.

Rápidamente, ya que no hicimos entrada para esta función, la función elegir hace lo siguiente:

ELEGIR (número índice, hacer esto si número índice es 1, hacer esto si número índice es 2; hacer esto si número índice es 3, etc)

 Entonces, ante la negativa de que el largo de F5 sea menor a 3, es decir si tenemos "cientos", "doscientos", etc., entramos a la parte del SI que contiene el "elegir".

 IZQUIERDA(DERECHA(F5;3);1)+1 : La Derecha de F5 de 3 caracteres es una rebundancia que quedó en la función original y que la verdad nos olvidamos de sacar. Así que eso, es lo mismo que decir "IZQUIERDA(F5;1)+1". Izquierda de posición 1 de ese texto de 3 dígitos, es nuestro tan apreciado número para el "ciento". Ese número puede ser 1,2,3,4,5,6,7,8 o 9. La parte en que se le suma 1, también entendemos que es una rebundancia de la original sacada del foro que linkeamos al principio. Pero es razonable, porque si no formateabamos el número en E, podíamos traer, por ejemplo, "098". Si esto ocurría, al 0 le sumaba 1 y caía en la primera condición del ELEGIR, que es cadena vacía. Analicemos el ELEGIR:

        ELEGIR(IZQUIERDA(DERECHA(F5;3);1)+1;"";SI(DERECHA(F5;2)="00";"cien ";"ciento ");
                          "doscientos ";"trescientos ";"cuatroscientos ";"quinientos ";"seiscientos
                          ";"setecientos ";"ochocientos ";"novecientos ")



Desglosado:

ELEGIR (
El úmero que vimos arriba, del 1 al 9 MAS 1, entonces índice=número del 2 al 10;
"";   =>>>> Como explicamos arriba, si índice es 1, no hacemos nada, no ocurrirá en nuestra planilla.
SI(DERECHA(F5;2)="00";"cien ";"ciento "); =>>>> Si índice es 2, analizamos si los siguientes son 00 y ponemos "cien ", sino "ciento ".
"doscientos "; =>>>> Si índice es 3, doscientos
"trescientos "; =>>>>Si índice es 4, trescientos
"cuatroscientos "; =>>>>Si índice es 5, cuatroscientos
"quinientos "; =>>>>Si índice es 6, quinientos
"seiscientos"; =>>>>Si índice es 7, seiscientos
"setecientos "; =>>>>Si índice es 8, ochocientos
"ochocientos "; =>>>>Si índice es 9, novescientos
"novecientos " =>>>>Si índice es 10, novescientos
 )


ANALIZANDO EL INDICE 2 (SI DERECHA...): Una función de este tipo es una forma de decirle a excel como "pensar". Si volvemos a cuarto o quinto grado, donde aprendíamos a escribir los números, nuestra forma de pensar era:
145: "El cien sigue por un número, entonces es "ciento..."
100: "El cien no tiene números, por lo tanto es cien"

Vamos a lo que sigue:



SI(O(VALOR(DERECHA(F5;2))<10;VALOR(DERECHA(F5;2))>19);
       "";
      SI(VALOR(DERECHA(F5;1))>5;
             "dieci";
               ELEGIR(VALOR (DERECHA(F5;1))+1;"diez  ";"once ";"doce ";"trece ";"catorce ";"quince ")
            )
)
&
SI(VALOR(DERECHA(F5;2))<20;
       "";
      ELEGIR(IZQUIERDA(DERECHA(F5;2);1)-1;SI(DERECHA(F5;1)="0";"veinte ";"veinti");"treinta ";
                "cuarenta ";"cincuenta ";"sesenta ";"setenta ";"ochenta ";"noventa ")
)
&
SI(Y(VALOR(DERECHA(F5;2))>30;DERECHA(F5;1)>"0");
       "y ";
"")
&
SI (O(VALOR(DERECHA(F5;2))<10; VALOR(DERECHA(F5;2))>15);
          ELEGIR(DERECHA(F5;1)+1;"";"un ";"dos ";"tres ";"cuatro ";"cinco ";"seis ";"siete ";"ocho ";"nueve ");
          ""


Otra vez lo mismo: una función de este tipo es una forma de decirle a excel como "pensar". 
Recordemos que esto se CONCATENA mediante & con lo analizado por lo verde.

Lo amarillo plantea el caso de que el número (VALOR) de los 2 últimos caracteres de estos 3, son O (usamos la función "O") menores a 10 O mayores a 19, no hagamos nada, cadena vacía (de eso se encarga lo que viene), SINO (si estamos en números del 10 al 19), entramos a otro SI: si el valor del último dígito es mayor a 5 (de 16 a 19), ponemos "dieci" y lo otro lo analizará la parte gris. Sino, estamos en los números del 10 al 15, ponemos un ELEGIR (con la misma lógica que explicamos arriba) y ponemos diez, once, doce, etc.

Entramos a lo Rosa. Acá se analizan los números mayores a veinte para los últimos 2 dígitos de nuestra cadena de 3. Es decir, estamos en los casos del 20 al 99. Si esto no ocurre, el SI pone cadena vacía y sigue. Si esto ocurre, volvemos a plantear un "ELEGIR": el primer dígito de la izquierda de ese número, puede ser 2,3,4,5,6,7,8 y 9. Pero para obtener un índice utilizable, le restamos un 1 a ese número. Ahora, nuestro índice va del 1 al 8. Si es 1, nuevamente tenemos que preguntar si es 20 o si es 21 a 29 para poner "veinti" o "veinte". Si es 2, treinta, etc.

Llegamos a lo rojo. Si estamos en un caso mayor a 30, PEERO que no termine con 0 (todos los números mayores a 30 exceptuando los múltiplos de 10), agregamos la letra "y ". Y sigue siendo razonable: 30,40,50,60,etc no llevan una "y" en su formación a letras. En cambio, 31,42,55, etc. si: treinta y uno, cuarenta y dos, cincuenta y cinco, etc.

Llegamos al fin de nuestro análisis: al "uno", "dos", etc. Lo gris! Si es menor a 10, no habíamos entrado a ningún otro supuesto, por lo que pondrá "uno", "dos", etc. Si recordamos que analizamos los "cientos" en lo verde y lo concatenamos con esto, el número 101 pasaría por lo verde, nos traería "ciento " (con el espacio) y el 01 entra en esto gris y sale como "un ". Hacemos correción para algunas imágenes ya subidas: "uno " es "un " porque después viene el "mil "

Por último, fijate que nos quedó colgado el verde!! A todo esto, le agregamos (concatenamos) el " mil " y estamos.


******************************************


Lo demás funciona igual, y no es más que concatenar, sacar la palabra "mil", etc.

Cualquier duda, la dejás y te decimos como lo hicimos.


Hacé clic para ver de que forma podés colaborar con nosotros:

Como colaborar

Hasta la próxima!


3 comentarios:

  1. Podes desarrollar el millon?? no entiendo si es tan simple porque el archivo no está completo, estaria perfecto, entre a la fuente y estan las bases exactamente igual a este archivo...pero sigo sin encontrar como hacer un millon por ejemplo. Gracias

    ResponderEliminar
  2. Hola. La fuente (el foro) llega hasta 999. Nosotros lo ampliamos a 999.999 y eso es completo para ejemplificar. Estamos con otros proyectos para compartir pero tenemos en cuenta ampliarlo aunqur no es el objetivo
    Saludos

    ResponderEliminar
  3. hola, el enlace esta desactivado por exceso de trafico, lo podrías compartir en mega?

    ResponderEliminar

Te puede interesar: