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 unaLAMBDAfila 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 conUNIRCADENASpermite montar el patrón al vuelo.COINCIDIRXen 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
- 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
- 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
- Multiplicar por coeficientes de escenario con INDICE, COINCIDIRX y SI.CONJUNTO CasoUn miembro de la comunidad tiene una tabla de conceptos con cantidades, precios y un campo "Escenario" (1, 2 o 3). Aparte, tiene una tabla d
- Filtrar filas con todos los valores a cero: 4 enfoques con FILTRAR y BYROW CasoJuan tiene una tabla grande donde muchas filas contienen solo ceros y necesita filtrarlas para quedarse solo con las que tienen datos reales
- Filtrar con múltiples condiciones usando matrices booleanas y BYROW CasoInteresante problema planteado por un miembro sobre cómo filtrar datos que cumplan varias condiciones simultáneas usando operaciones matrici
- Eliminar filas en blanco de una tabla con FILTRAR y BYROW CasoOscar plantea una duda práctica: tiene una tabla en Excel con filas que contienen información y otras vacías, y necesita extraer solo las fi
- 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
- ¿MAP o BYROW? Descubre cuándo usar cada una Tutorial¿MAP o BYROW? Descubre cuándo usar cada una y cómo estas funciones pueden transformar tu forma de trabajar en Excel. En este vídeo aprenderá
- Montecarlo en Excel explicado con croissants Tutorial¿Se puede usar Excel para calcular croissants? Sí, y lo hacemos con el método Montecarlo.
- Conciliación contable: una sola fórmula por hoja que cuadra, descuadra y avisa CasoEsta semana alguien preguntó en el grupo si tenía sentido montarse un fichero para conciliaciones bancarias. La respuesta llegó en forma de