Convertir numeros a letras con LAMBDA y LET en Excel
Oscar plantea una necesidad muy comun en entornos contables y administrativos: convertir cantidades numericas a su representacion en texto (por ejemplo, para cheques o facturas). Pregunta si alguien tiene una solucion con LAMBDA.
Hector responde rapidamente con una solucion completa basada en dos funciones con nombre definido que trabajan juntas. La primera, ConvierteCifra, descompone un grupo de tres digitos (centenas, decenas, unidades) usando MID y SWITCH:
``
=LAMBDA(texto,
LET(
Centena, MID(texto, 1, 1),
Decena, MID(texto, 2, 1),
Unidad, MID(texto, 3, 1),
txtCentena, SWITCH(Centena,
"1", "CIEN", "2", "DOSCIENTOS",
"3", "TRESCIENTOS", "4", "CUATROCIENTOS",
"5", "QUINIENTOS", "6", "SEISCIENTOS",
"7", "SETECIENTOS", "8", "OCHOCIENTOS",
"9", "NOVECIENTOS", ""),
txtDecena, SWITCH(Decena,
"1", SWITCH(Unidad, "0", "DIEZ",
"1", "ONCE", "2", "DOCE", "3", "TRECE",
"4", "CATORCE", "5", "QUINCE",
"6", "DIECISEIS", "7", "DIECISIETE",
"8", "DIECIOCHO", "9", "DIECINUEVE", ""),
"2", IF(Unidad="0", "VEINTE", "VEINTI"),
"3", IF(Unidad="0", "TREINTA", "TREINTA Y "),
"4", IF(Unidad="0", "CUARENTA", "CUARENTA Y "),
"5", IF(Unidad="0", "CINCUENTA", "CINCUENTA Y "),
"6", IF(Unidad="0", "SESENTA", "SESENTA Y "),
"7", IF(Unidad="0", "SETENTA", "SETENTA Y "),
"8", IF(Unidad="0", "OCHENTA", "OCHENTA Y "),
"9", IF(Unidad="0", "NOVENTA", "NOVENTA Y "), ""),
txtUnidad, SWITCH(Unidad,
"1", "UNO", "2", "DOS", "3", "TRES",
"4", "CUATRO", "5", "CINCO", "6", "SEIS",
"7", "SIETE", "8", "OCHO", "9", "NUEVE", ""),
txtCentena & " " & txtDecena & " " & txtUnidad
)
)
`
La segunda funcion, EnLetra, recibe el numero completo, lo formatea con TEXT a 9 digitos + 2 decimales, y aplica ConvierteCifra a cada grupo (millones, miles, cientos):
`
=LAMBDA(Numero,
LET(
texto, TEXT(Numero, "000000000.00"),
Millones, MID(texto, 1, 3),
Miles, MID(texto, 4, 3),
Cientos, MID(texto, 7, 3),
Decimales, MID(texto, 11, 2),
CadMillones, ConvierteCifra(Millones),
CadMiles, ConvierteCifra(Miles),
CadCientos, ConvierteCifra(Cientos),
Cadena, IF(CadMillones<>"",
IF(CadMillones="UNO",
CadMillones & " MILLON",
CadMillones & " MILLONES"), "")
& " " & IF(CadMiles<>"", CadMiles & " MIL", "")
& " " & IF(CadCientos<>"", CadCientos & " PESOS", "")
& " " & Decimales & "/100 M.N.",
TRIM(Cadena)
)
)
`
Ambas funciones se definen como nombres en el Administrador de nombres de Excel. Despues, basta con usar =EnLetra(A1) para obtener la conversion completa. Una solucion elegante que aprovecha LAMBDA y LET` para reemplazar lo que tradicionalmente requeria VBA.
El problema: convertir cifras a texto sin VBA
Óscar planteó una necesidad clásica en contabilidad y administración: convertir cantidades numéricas a su representación en letra, por ejemplo para cheques o facturas. La pregunta fue directa: si alguien tiene una solución con LAMBDA, sin recurrir a macros de VBA.
Héctor respondió con una solución completa basada en dos funciones con nombre que trabajan juntas, definidas en el Administrador de nombres de Excel. Es un buen ejemplo de cómo LAMBDA y LET sustituyen hoy a lo que antes obligaba a programar en VBA.
Función 1: convertir un grupo de tres cifras
La primera función, que podemos llamar ConvierteCifra, recibe un texto de tres dígitos (centena, decena y unidad) y lo traduce a palabras. Internamente descompone el texto con EXTRAE para separar cada dígito, y usa CAMBIAR (la función que evalúa un valor contra una lista de casos) para asignar la palabra correspondiente a las centenas, las decenas y las unidades.
La estructura, simplificada:
`` =LAMBDA(texto; LET( centena; EXTRAE(texto;1;1); decena; EXTRAE(texto;2;1); unidad; EXTRAE(texto;3;1); txtCentena; CAMBIAR(centena; "1";"CIEN"; "2";"DOSCIENTOS"; "3";"TRESCIENTOS"; "4";"CUATROCIENTOS"; "5";"QUINIENTOS"; "6";"SEISCIENTOS"; "7";"SETECIENTOS"; "8";"OCHOCIENTOS"; "9";"NOVECIENTOS"; ""); txtDecena; CAMBIAR(decena; ...); txtUnidad; CAMBIAR(unidad; ...); txtCentena & " " & txtDecena & " " & txtUnidad ) ) ``
La parte de las decenas tiene un matiz bonito: cuando la decena es 1, un CAMBIAR anidado sobre la unidad resuelve los casos especiales del español (DIEZ, ONCE, DOCE, TRECE hasta DIECINUEVE). Para el resto, distingue entre la decena redonda (VEINTE, TREINTA) y la forma con enlace (VEINTI, TREINTA Y).
Función 2: ensamblar millones, miles y cientos
La segunda función, EnLetra, recibe el número completo. Primero lo formatea con TEXTO a nueve dígitos más dos decimales, garantizando siempre la misma longitud. Después divide ese texto en grupos con EXTRAE —millones, miles, cientos y decimales— y aplica ConvierteCifra a cada bloque. Por último, une las piezas añadiendo las palabras "MILLÓN" o "MILLONES", "MIL", "PESOS" y la coletilla de los decimales.
La lógica de ensamblado se apoya en SI para omitir los bloques que quedan vacíos: si el grupo de millones da cadena, se añade con su etiqueta; si está vacío, se salta. Un RECORTAR (TRIM) final limpia los espacios sobrantes. El resultado es una cadena limpia lista para un cheque o una factura.
Con ambas funciones registradas como nombres, el uso es tan simple como escribir =EnLetra(A1) en cualquier celda.
Funciones clave
LAMBDA: define funciones personalizadas reutilizables, sin VBA.LET: nombra los pasos intermedios (cada dígito, cada bloque) y hace legible una fórmula que de otro modo sería ilegible.CAMBIAR: mapea cada dígito a su palabra, mucho más limpio que anidar decenas deSI.EXTRAE: descompone el número en grupos de tres cifras.TEXTO: fija la longitud del número para poder trocearlo con posiciones fijas.RECORTAR: elimina los espacios sobrantes del ensamblado final.
Conclusión
Convertir números a letras era, durante años, el ejemplo de manual para justificar el uso de VBA en Excel. Este caso demuestra que ya no hace falta: con dos LAMBDA bien pensadas y CAMBIAR como traductor, la conversión vive en el propio libro, sin macros que activar ni ficheros habilitados. Es exactamente el tipo de solución que circula cada semana en la comunidad de Influexcel, donde alguien plantea una necesidad concreta y otra persona aparece con la pieza que la resuelve.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- Descomposición de Cholesky con matrices dinámicas: de VBA a LAMBDA+REDUCE CasoJuan Pablo lanza un reto al grupo: tiene una descomposición de Cholesky resuelta con VBA y quiere saber si se puede hacer con matrices dinám
- Estructurar correctamente LAMBDA con LET y parámetros opcionales CasoNuevo reto de Excel resuelto por la comunidad: un miembro está creando una función LAMBDA personalizada para calcular potencia de bombeo (fó
- Filtro multicriteria dinámico con LET, FILTRAR y LAMBDA CasoHector comparte con la comunidad una fórmula avanzada para filtrar una tabla de productos/servicios por múltiples criterios opcionales (clav
- Funciones personalizadas en Excel: LET, LAMBDA y recursividad TutorialCómo pasar de una fórmula escrita a mano a una función propia que puedes llamar por su nombre en cualquier libro. Los tres vídeos de esta pá
- Generar la serie de Fibonacci con REDUCE, APILARV y LAMBDA CasoInteresante ejercicio compartido en la comunidad: generar los primeros N números de la serie de Fibonacci usando exclusivamente fórmulas de
- Reestructurar datos apilados con LAMBDA y PIVOTARPOR CasoUn miembro de la comunidad comparte un archivo de revisión de Seguridad Social con una tabla amplia (34 columnas x 1540 filas) en formato "a
- Optimización de REDUCE+APILARV con LAMBDA recursiva en bisección CasoAlejandro plantea un reto de rendimiento interesante: tiene una fórmula LET enorme que calcula la permanencia de carga en puerto por matrícu
- Validar datos en Excel con máscaras de formato (sin VBA) TutorialValidar que un código, una matrícula o un NIF siguen el formato correcto suele acabar en una macro. No hace falta: con una función personali
- Detectar clientes con valores distintos en un campo para formato condicional CasoUn miembro de la comunidad tiene una tabla de clientes donde un mismo cliente puede aparecer varias veces. Necesita detectar a simple vista
- Charts con ZOOM en Excel TutorialTransforma tus datos en insights visuales efectivos