Categorizar automáticamente conceptos con BUSCARX REGEX y MAP
Un miembro de la comunidad tiene una lista de compra (conceptos como "leche entera", "pan integral", etc.) y una tabla de categorías donde cada categoría tiene asociadas varias palabras clave separadas por punto y coma. Necesita que la fórmula busque automáticamente en cada concepto las palabras clave y devuelva la categoría correspondiente. Además, un concepto podría pertenecer a varias categorías.
Leo propone la solución más elegante con BUSCARX en modo REGEX (tercer argumento de coincidencia = 3):
``
=MAP(C9:C13;LAMBDA(x;
@ENCOL(BUSCARX(DIVIDIRTEXTO(x;;" ");C3:C6;B3:B6;;3);2)
))
`
Divide cada concepto en palabras con DIVIDIRTEXTO y busca cada palabra como patrón regex en las categorías. @ENCOL(...;2) toma el primer resultado.
Hugo aporta un enfoque con FILTRAR + MAP + HALLAR que soporta multi-categoría:
`
=MAP(C9:C13;LAMBDA(c;
MATRIZATEXTO(FILTRAR(B3:B6;
MAP(C3:C6;LAMBDA(x;
CONTAR(HALLAR(DIVIDIRTEXTO(x;";");c))
))
))
))
`
Divide las palabras clave de cada categoría con DIVIDIRTEXTO, usa HALLAR para buscarlas en el concepto, y FILTRAR devuelve las categorías que coinciden. MATRIZATEXTO las une si hay varias.
Miki propone un tercer enfoque con LET, DIVIDIRTEXTO y REPETIR:
`
=LET(
m;SI.ND(DIVIDIRTEXTO(TEXTODESPUES("; "&C3:C6;"; ";{1\2\3\4\5});" "););
MAP(C9:C13;LAMBDA(x;
UNIRCADENAS("-";;REPETIR(categorias;ESNUMERO(HALLAR(m;x))*(m>"")))
))
)
`
Descompone todas las palabras clave en una matriz, comprueba con HALLAR cuáles aparecen en cada concepto, y usa REPETIR` como truco para devolver las categorías que coinciden.
El problema: asignar categoría por palabras clave
Un miembro tenía una lista de la compra ("leche entera", "pan integral"...) y una tabla de categorías, cada una con varias palabras clave separadas por punto y coma. Quería que una fórmula leyera cada concepto, detectara qué palabras clave aparecen y devolviera la categoría correspondiente. Con un giro extra: un mismo concepto podía encajar en varias categorías.
Enfoque 1: BUSCARX en modo REGEX
Leo firmó la solución más limpia aprovechando el modo de coincidencia por expresión regular de BUSCARX (tercer argumento de coincidencia igual a 3):
`` =MAP(C9:C13;LAMBDA(x; @ENCOL(BUSCARX(DIVIDIRTEXTO(x;;" ");C3:C6;B3:B6;;3);2) )) ``
DIVIDIRTEXTO(x;;" ") parte el concepto en palabras sueltas. Cada palabra se busca como patrón contra la lista de categorías en modo REGEX, y @ENCOL(...;2) se queda con el primer acierto. Corto y directo cuando basta con una categoría por concepto.
Enfoque 2: FILTRAR + MAP + HALLAR (multi-categoría)
Hugo planteó una versión pensada para cuando un concepto pertenece a más de una categoría:
`` =MAP(C9:C13;LAMBDA(c; MATRIZATEXTO(FILTRAR(B3:B6; MAP(C3:C6;LAMBDA(x; CONTAR(HALLAR(DIVIDIRTEXTO(x;";");c)) )) )) )) ``
Aquí la lógica se invierte: por cada categoría, divide sus palabras clave con DIVIDIRTEXTO y usa HALLAR para ver cuáles aparecen en el concepto. CONTAR convierte esos aciertos en un número, FILTRAR se queda con las categorías que tienen al menos una coincidencia y MATRIZATEXTO las une en una sola celda si hay varias.
Enfoque 3: descomponer las palabras clave con LET
Miki aportó un tercer camino: descompone todas las palabras clave en una matriz con DIVIDIRTEXTO y TEXTODESPUES, comprueba con HALLAR cuáles están presentes en cada concepto y usa REPETIR como truco para devolver solo las categorías coincidentes, unidas con UNIRCADENAS. Es el enfoque más "artesanal" de los tres, y demuestra que en Excel moderno casi siempre hay una tercera forma de llegar al mismo sitio.
Un apunte sobre el modo REGEX de BUSCARX
La gran novedad aquí es el tercer valor de coincidencia (3) de BUSCARX: en lugar de buscar una igualdad exacta o aproximada, interpreta el criterio como una expresión regular. Eso permite que "leche" haga match dentro de una lista de palabras clave sin montar comodines a mano. Es una de las incorporaciones más potentes de las últimas versiones y abre la puerta a búsquedas de texto que antes exigían HALLAR anidados.
Funciones clave
BUSCARX(modo REGEX): busca por patrón cuando el tercer argumento de coincidencia es 3.DIVIDIRTEXTO: separa el concepto o las palabras clave en piezas.MAP+LAMBDA: recorren la lista aplicando la lógica a cada concepto.FILTRAR+HALLAR: seleccionan las categorías cuyas palabras aparecen en el texto.MATRIZATEXTO/UNIRCADENAS: reúnen varias categorías en una celda.
Conclusión
Del mismo problema salieron tres soluciones con filosofías distintas: la elegancia del REGEX de BUSCARX, la robustez multi-categoría de FILTRAR + HALLAR, y el ingenio artesanal de REPETIR. Cuál usar depende de si necesitas una categoría o varias, y de cuánto quieras apoyarte en las funciones más nuevas. Este tipo de comparativas es justo lo que se cuece cada semana en la comunidad de InflueXcel.
Más contenido de Excel en InflueXcel
- Cuenta clientes y cervezas en Excel 🍺 Caso "La Taberna: El Poney Pisador" (Nivel 1) Tutorial🍺 Noche cerrada en Bree. Frodo, Sam, Merry y Pippin cruzan la puerta de El Poney Pisador huyendo de los Jinetes Negros: la sala está a reven
- SUMAR.SI.CONJUNTO en acción con El Señor de los Anillos 🃏 El 21 de La Comarca TutorialLo que practicamos en este caso: • Contar cartas por palo con CONTAR.SI • Sumar valores con condiciones (SUMAR.SI / SUMAR.SI.CONJUNTO) • Apl
- Reto de Excel: El cumpleaños de Bilbo 🎂 | CONTAR.SI y SUMAR.SI desde cero (Nivel 1) TutorialEn La Comarca se celebra el cumpleaños número 111 de Bilbo Bolsón: cerveza, pasteles, fuegos artificiales… y algún curioso escondido tras el
- ¡Excel PowerQuery Hack! Conexiones con rutas relativas en 10 minutos! Tutorial¿Harto de ajustar las conexiones en PowerQuery cada vez que compartes tu archivo de Excel? 🙄 Convierte las conexiones de PowerQuery con ruta
- Mejora un 90% el rendimiento de Power Query con SQLite TutorialPower Query es una herramienta potente para consolidar, combinar y calcular datos, pero cuando trabajamos con millones de registros y calcul
- Reorganizar tablas mensuales: cruzar por persona buscando en vertical y en horizontal CasoNuevo caso interesante de la comunidad. Juan tenía varias tablas mensuales (a veces más de una en el mismo mes) y quería reorganizarlas por
- Un dato de todas las hojas, escrito una sola vez CasoEsta semana surgió en la comunidad un reto muy habitual cuando un libro tiene muchas hojas: mostrar el valor de la celda B3 de cada hoja, in
- Un índice de hojas que se genera solo: HYPERLINK en rangos desbordados CasoEsta semana surgió en la comunidad un pequeño "expediente X". Un miembro llegó tras ver un vídeo con una idea clara en la cabeza: montar una
- Reformatear un código alfanumérico al teclear: de NN1234567 a NN-12345-67 CasoEsta semana surgió en la comunidad una duda muy práctica: cómo conseguir que al escribir un código tipo NN1234567 (dos letras seguidas de si
- Reclasificación contable: duplicar cada fila con una conversión distinta por columna, en un único bloque CasoInteresante reto contable planteado esta semana por un miembro de la comunidad. Juan parte de una tabla de apuntes contables (rango C7:P10)