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 casos con estas funciones
Más contenido de Excel en InflueXcel
- Filtro multicriteria dinámico con LET, FILTRAR y LAMBDA CasoHéctor comparte con la comunidad una fórmula avanzada para filtrar una tabla de productos/servicios por múltiples criterios opcionales (clav
- Buscar todos los valores coincidentes cuando BUSCARX solo devuelve uno CasoJuan se encuentra con un problema frecuente: tiene una tabla de búsqueda con claves duplicadas (la A aparece varias veces con valores distin
- Encontrar palabras comunes entre dos textos con fórmulas CasoReto de LinkedIn que un miembro trae al grupo: dadas dos columnas con frases, encontrar las palabras que aparecen en ambas. La comunidad des
- Readmisión de pacientes en 48h: Power Query, LAMBDA/MAP y AGRUPARPOR CasoAndrés Rojas plantea un reto real de datos clínicos: a partir de una tabla con más de un millón de registros de urgencias (IdPaciente, Fecha
- Filtrar una tabla por una lista de valores: una LAMBDA propia y su inversa TutorialTe pasan una lista de 30 números de albarán y hay que sacar esas filas de una tabla de miles. Con el autofiltro es marcar casillas una a una
- Del VBA a una sola fórmula: calcular el RFC mexicano con LET, MAP y expresiones regulares CasoHéctor llega al grupo con un problema que no se ve todos los días: tiene resuelto el cálculo del RFC mexicano, pero lo tiene en VBA, y quier
- Filtrar datos por código parcial y crear listas desplegables dependientes CasoRosario pone en práctica las enseñanzas de la comunidad pero se queda atascada: tiene una tabla con códigos jerárquicos (1.01, 1.02, 2.01, 2
- 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á
- Obtén los valores seleccionados de un slicer con MIEMBRORANGOCUBO TutorialUn slicer filtra la tabla dinámica, pero ¿cómo sabes desde una fórmula qué ha seleccionado el usuario? Es lo que hace falta para poner títul
- Power Pivot para Finanzas TutorialEn este tutorial completo de Power Pivot para FINANZAS, aprenderás a crear un modelo de datos sencillo en Excel que te permitirá trabajar co