De números a palabras con la función LET() en Excel

Aunque en Excel lo normal sea utilizar números, muchos reportes escritos aprecian el uso formal de palabras como norma no escrita, como poner «dos millones» en vez de «2,000,000». En otras ocasiones es mandatorio usar ambas formas a la vez, y aunque en números cerrados no es gran cosa, si habláramos de una cifra exacta como 153,294 ahí sí que nos vendría bien un poco de ayuda.

Por suerte, Excel cuenta con una elegante fórmula para convertir números a su homónimo en palabras, la cual te puede ahorrar esos minutos a la hora de lidiar con muchas cantidades escritas.

Para ello necesitaremos una versión de Excel en Office 365, ya que emplearemos la función LET(). Si cuentas con una versión más antigua de Excel, aquí puedes descargar un UDF en Excel VBA.

LA FUNCIÓN

=LET(
 th, INT(A1/1000),
 th.h, MOD(th/100, 10),
 th.t, MOD(th, 100),
 th.tens1, INT(th.t/10),
 th.tens2, MOD(th.t,10),
 h,MOD(A1/100,10),
 t, MOD(A1,100),
 tens1, INT(t/10),
 tens2, MOD(t,10),
 tys, {"twenty","thirty","fourty","fifty","sixty","seventy","eighty","ninety"},
 upto19, {"one","two","three","four","five","six","seven","eight",
 "nine","ten","eleven","twelve","thirteen","fourteen","fifteen",
 "sixteen","seventeen","eighteen","nineteen"},
 CONCAT(IF(th<1, "", IF(th.h>=1,INDEX(upto19,th.h)&" hundred ","") &
 IF(th.t<1,"", IF(th.tens1<2,INDEX(upto19, th.t), INDEX(tys,th.tens1-1) & IF(th.tens2>=1,"-"&INDEX(upto19,th.tens2),"")))&
 " thousand "),
 IF(h>=1,INDEX(upto19,h)&" hundred ",""),
 IF(t<1,"", IF(tens1<2,INDEX(upto19, t), INDEX(tys,tens1-1)& IF(tens2>=1,"-"&INDEX(upto19,tens2),"")))))

Cabe aclarar que a como está escrita aquí asume que el número que deseas convertir se encuentra en la celda A1, por lo que será necesario cambiarlo a como sea necesario. Otra cosa importante de mencionar es que esta fórmula solo convierte números hasta el 999,999.

CÓMO FUNCIONA

Para poder entender cómo funciona esta fórmula primero debemos entender la función LET(). Ésta nos permite definir variables a usar en el contexto de una fórmula. Esto significa que podemos usar la función LET para acortar fórmulas largas. Un ejemplo de lo anterior sería así:

En la fórmula original estamos usando SUM(C1:C10) varias veces, mientras que en el ejemplo con la fórmula LET() empezamos por definir una variable «s» como igual a SUM(C1:C10), para luego usar «s» en el resto de la fórmula. Esto simplifica la fórmula y la hace más rápida también, ya que Excel solo calcula SUM(C1:C10) una vez.

Ahora bien, «¿cómo se traduce esto a la fórmula para convertir números a palabras?»

El proceso no es realmente complicado, pero entenderlo te ayudará a aplicar la misma lógica a millones, billones y tanto como puedas llegar a necesitarlo. Basta con entender el proceso con números hasta el 999:

Lo primero en este proceso es definir dos arrays: «upto19» y «tys» para que contengan {uno,dos,…,diecinueve} y {veinte,treinta…noventa} respectivamente.
Del número que deseamos tomar (que en la plantilla corresponde a la celda A1) calcula estos cuatro números y depositalos en variables:

 h = MOD(A1/100,10)
 t =  MOD(A1,100)
 tens1 = INT(t/10)
 tens2 = MOD(t,10) 

Una forma de interpretar estas variables sería:

  • h contiene el dígito de cientos
  • t te dice los últimos dos dígitos
  • tens1 dice el dígito de decenas
  • tens2 dice el dígito de las unidades

Por lo que si el número en A1 fuese 987, los cuatro valores serían:

  • h=9
  • t=87
  • tens1=8
  • tens2=7

Ahora haría falta construir la versión en palabras por medio de concatenacion:

  1. INDEX(upto19, h)
  2. ” hundred “
  3. if tens1<2 then INDEX(upto19, t)
  4. else INDEX(tys, tens1-1)&”-“&INDEX(upto19, tens2)

La fórmula actul necesita unas cuantas condiciones if para detener el flujo una vez que alcances un número cerrado; así, 500 sería interpretado como «quinientos» sin más palabras por delante. Para alcanzar números hasta 999,999 habría que seguir la misma idea de arriba.

Si deseas saber más sobre la función LET a un nivel técnico, aquí tienes un link con toda la documentación oficial de Microsoft.

LIMITACIONES

Por desgracia, esta fórmula ignora cualquier porción luego de un punto, por lo que los decimales quedan descartados por completo, así como tampoco mostraría «cero» si el valor es «0». Otra cosa es que solo es óptima en números hasta 999,999, ya que si bien se puede aumentar fácimente hasta los cientos de millones o los billones, la fórmula se vuelve muy larga.

Descubre la nueva función LET de Excel 365 y aprende todo el poder oculto de las variables. Cualquier duda nos leemos abajo.

De números a palabras con la función LET() en Excel
Scroll hacia arriba