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