Buscar prefijos de longitud variable en otra columna: BYROW, MAP, REGEX y COINCIDIRX

Interesante problema planteado por un miembro: tiene una columna A con ~1.200 referencias de longitud variable y una columna C con ~276 textos compuestos. Necesita encontrar qué referencia de A aparece al inicio de cada texto de C — una búsqueda de prefijo sin longitud fija.

La comunidad respondió con cuatro enfoques completamente distintos.

Solución de Nacho: BYROW + SUMA con IZQUIERDA de longitud variable

``
=LET(
_I; A2:A1209;
_R; C2:C276;
BYROW(_I; LAMBDA(_X;
LET(
_S; SUMA((1IZQUIERDA(_R; SECUENCIA(; MAX(LARGO(_I))))=_X)_R);
SI(_S=0; "No Encontrado"; _S)
)
))
)
`

Para cada referencia de A, genera todas las longitudes posibles con SECUENCIA y compara con IZQUIERDA de cada valor de C.

Solución de John (opción 1): MAP + FILTRAR

`
=LET(
a; A2:A1209;
MAP(C2:C276; LAMBDA(x;
FILTRAR(a; IZQUIERDA(x; LARGO(a))=a&""; "No disponible")
))
)
`

Itera sobre C con MAP y para cada valor de C filtra qué referencia de A coincide al inicio. Limpio y directo.

Solución de John (opción 2): REGEXEXTRACCION + UNIRCADENAS

`
=SI.ND(
REGEXEXTRACCION(C2:C276; "^("&UNIRCADENAS("|";; A2:A1209)&")");
"No disponible"
)
`

Construye un patrón regex dinámicamente con todas las referencias separadas por | y lo aplica de una sola vez sobre toda la columna C. Elegante y muy eficiente para este tipo de problema.

Solución de Gerson: INDICE + COINCIDIRX con wildcard

`
=SI.ND(
INDICE(B2:B276; COINCIDIRX(A2:A1209&""; B2:B276; 2));
"No encontrado"
)
`

Usa el modo wildcard de COINCIDIRX (modo 2) añadiendo "" al final de cada referencia para buscar coincidencias de prefijo sin necesidad de calcular longitudes.

---

La solución con REGEXEXTRACCION + UNIRCADENAS` es especialmente potente: construye el patrón con todas las referencias en una sola fórmula y lo evalúa en bloque sobre toda la columna.

El problema: buscar un prefijo de longitud variable

Un miembro de la comunidad planteó un caso muy común cuando trabajas con referencias reales: tiene una columna A con unas 1.200 referencias de longitud variable y una columna C con unos 276 textos compuestos. Necesita averiguar qué referencia de A aparece al principio de cada texto de C.

El reto está en que las referencias no miden todas lo mismo. Una búsqueda normal con BUSCARX o COINCIDIRX compara valores completos; aquí hace falta comparar solo el inicio de cada texto, y sin saber de antemano cuántos caracteres ocupa el prefijo. La comunidad respondió con cuatro enfoques totalmente distintos, y merece la pena verlos porque cada uno enseña una técnica reutilizable.

Solución 1: BYROW + SUMA con IZQUIERDA de longitud variable

Nacho recorre cada referencia de A y, para cada una, genera todas las longitudes posibles de prefijo con SECUENCIA y las compara con IZQUIERDA sobre toda la columna C:

`` =LET( _I; A2:A1209; _R; C2:C276; BYROW(_I; LAMBDA(_X; LET( _S; SUMA((1IZQUIERDA(_R; SECUENCIA(; MAX(LARGO(_I))))=_X)_R); SI(_S=0; "No Encontrado"; _S) ) )) ) ``

La clave es IZQUIERDA(_R; SECUENCIA(; MAX(LARGO(_I)))): extrae el prefijo de 1, 2, 3... caracteres de cada texto y comprueba cuál coincide con la referencia actual.

Solución 2: MAP + FILTRAR

John le da la vuelta al problema: en vez de recorrer las referencias, recorre los textos de C con MAP y para cada uno filtra qué referencia de A encaja al principio.

`` =LET( a; A2:A1209; MAP(C2:C276; LAMBDA(x; FILTRAR(a; IZQUIERDA(x; LARGO(a))=a&""; "No disponible") )) ) ``

IZQUIERDA(x; LARGO(a)) toma de cada texto tantos caracteres como mide cada referencia, y FILTRAR se queda con la que coincide. Limpio y muy legible.

Solución 3: REGEXEXTRACCION + UNIRCADENAS

Aquí llega la joya del caso. John construye un patrón dinámico uniendo todas las referencias con la barra vertical (que en las expresiones regulares significa "o esto o lo otro") y lo evalúa de una sola pasada sobre toda la columna:

`` =SI.ND( REGEXEXTRACCION(C2:C276; "^("&UNIRCADENAS("|";; A2:A1209)&")"); "No disponible" ) ``

UNIRCADENAS("|";; A2:A1209) genera un patrón del tipo ref1|ref2|ref3... y el símbolo ^ fuerza que la coincidencia sea al inicio del texto. Una única fórmula resuelve las 276 filas sin iterar. Elegante y muy eficiente.

Solución 4: INDICE + COINCIDIRX con comodín

Gerson evita calcular longitudes usando el modo comodín de COINCIDIRX (modo de búsqueda 2), añadiendo un asterisco al final de cada referencia:

`` =SI.ND( INDICE(B2:B276; COINCIDIRX(A2:A1209&"*"; B2:B276; 2)); "No encontrado" ) ``

El asterisco convierte cada referencia en "empieza por esto", y COINCIDIRX hace el resto sin necesidad de IZQUIERDA ni SECUENCIA.

Funciones clave

  • BYROW: aplica una LAMBDA fila a fila sobre un rango, ideal para procesar cada referencia por separado.
  • SECUENCIA: genera la lista de longitudes posibles para probar prefijos de distinto tamaño.
  • MAP: recorre un array aplicando una función a cada elemento; perfecto para iterar sobre los textos.
  • REGEXEXTRACCION: extrae texto según un patrón; combinada con UNIRCADENAS permite montar el patrón al vuelo.
  • COINCIDIRX en modo comodín: busca coincidencias parciales usando el asterisco como "cualquier cosa".

Conclusión

Un mismo problema, cuatro caminos: iterar con BYROW, invertir la lógica con MAP, montar un patrón regex dinámico o tirar de comodines en COINCIDIRX. La versión con REGEXEXTRACCION + UNIRCADENAS es la más compacta y rápida, pero cada enfoque enseña una idea que puedes reaprovechar en tus propios modelos. Este tipo de casos, con problemas reales y varias soluciones sobre la mesa, es lo que sale cada semana en la comunidad de Influexcel.

Más casos con estas funciones

Más contenido de Excel en InflueXcel