Extraer matrículas de vehículos con REGEX (3 enfoques)
Un miembro de la comunidad comparte un archivo con 152 registros de compras de mantenimiento de vehículos. Cada descripción es texto libre del tipo "INTERNO-MT CK2859, CK2860, CK2861, MA2883 REVISADO" donde las matrículas (patrón de 2 letras + 4 dígitos) están mezcladas con el resto del texto. Tiene una hoja auxiliar con las 22 placas únicas válidas.
El archivo incluye la solución original del autor: una fórmula CSE clásica con BUSCAR + MIN + EXTRAE que busca cada placa de la lista maestra en el texto y extrae la primera coincidencia. Funciona, pero tiene una limitación importante: solo detecta la primera placa cuando hay varias en la misma descripción.
Solución directa con REGEXEXTRACCION — Leo propone la forma más limpia:
``
=MATRIZATEXTO(
SI.ND(
REGEXEXTRACCION(A2; "[A-Z]{2}[0-9]{4}"; 1);
""
)
)
`
REGEXEXTRACCION busca el patrón regex [A-Z]{2}[0-9]{4} (2 letras + 4 números) en cada celda. SI.ND gestiona los casos sin coincidencia y MATRIZATEXTO convierte el resultado en texto limpio. Con el tercer argumento de REGEXEXTRACCION se pueden capturar múltiples coincidencias, superando la limitación de la fórmula original.
Verificación contra lista maestra — Leo añade una variante para comprobar que las placas extraídas realmente existen en la hoja de placas únicas:
`
=LET(
extract; REGEXEXTRACCION(A2; "[A-Z]{2}[0-9]{4}"; 1);
SI.ND(
UNIRCADENAS("-"; 1;
REPETIR(extract; extract='Placas unicas'!$A$2:$A$23)
);
""
)
)
`
El truco está en REPETIR: repite la placa extraída tantas veces como coincidencias haya en la lista maestra (1 si existe, 0 si no). UNIRCADENAS las une descartando vacíos.
Enfoque alternativo con FILTRAR + BYROW — John propone filtrar directamente desde la lista de placas únicas, comprobando cuáles aparecen en cada celda:
`
=LET(
a; 'Placas unicas'!A$2:A$23;
MATRIZATEXTO(
FILTRAR(a;
BYROW(
HALLAR(REGEXEXTRACCION(A2; "[A-Z]{2}\d{4}"; 1); a);
CONTAR
);
""
)
)
)
`
Esta fórmula invierte la lógica: en vez de extraer y luego verificar, filtra la lista maestra dejando solo las placas que HALLAR encuentra en la celda. BYROW con CONTAR comprueba fila por fila si hay coincidencia.
Tres enfoques que muestran la evolución de Excel: de fórmulas CSE clásicas con BUSCAR+MIN+EXTRAE a REGEXEXTRACCION, pasando por la verificación cruzada con REPETIR y la búsqueda inversa con FILTRAR+BYROW`. El archivo incluye los 152 registros originales para practicar.
El problema: extraer matrículas de texto libre
Un miembro de la comunidad compartió un archivo con 152 registros de compras de mantenimiento de vehículos. Cada descripción es texto libre del estilo "INTERNO-MT CK2859, CK2860, CK2861, MA2883 REVISADO", donde las matrículas están mezcladas con el resto del texto. El patrón de una matrícula es siempre el mismo: dos letras seguidas de cuatro dígitos. Además hay una hoja auxiliar con las 22 placas únicas válidas.
El fichero ya incluía la solución original del autor: una fórmula CSE clásica con BUSCAR + MIN + EXTRAE que recorre la lista maestra y extrae la primera coincidencia. Funciona, pero tiene un límite claro: solo detecta la primera placa cuando en una misma descripción aparecen varias. La comunidad propuso tres enfoques modernos para superarlo.
Solución 1: REGEXEXTRACCION directo
Leo propone la forma más limpia con REGEXEXTRACCION, la función de expresiones regulares de Excel. El patrón describe "dos letras mayúsculas seguidas de cuatro cifras":
`` =MATRIZATEXTO( SI.ND( REGEXEXTRACCION(A2; PATRON_MATRICULA; 1); "" ) ) ``
Donde PATRON_MATRICULA es la expresión regular que representa dos letras y cuatro números. SI.ND gestiona las celdas sin coincidencia y MATRIZATEXTO limpia el resultado. La ventaja frente a la fórmula original es que el tercer argumento de REGEXEXTRACCION permite capturar todas las coincidencias de una celda, no solo la primera.
Solución 2: extracción + verificación contra la lista maestra
Leo añade una variante para comprobar que las placas extraídas existen realmente en la hoja de placas únicas:
`` =LET( extract; REGEXEXTRACCION(A2; PATRON_MATRICULA; 1); SI.ND( UNIRCADENAS("-"; 1; REPETIR(extract; extract='Placas unicas'!$A$2:$A$23) ); "" ) ) ``
El truco está en REPETIR: repite cada placa extraída tantas veces como veces aparezca en la lista maestra (una si existe, ninguna si no). UNIRCADENAS une el resultado descartando los vacíos, de modo que solo sobreviven las matrículas válidas.
Solución 3: FILTRAR + BYROW (búsqueda inversa)
John invierte la lógica: en lugar de extraer y luego verificar, filtra la lista de placas únicas dejando solo las que aparecen en cada celda.
`` =LET( a; 'Placas unicas'!A$2:A$23; MATRIZATEXTO( FILTRAR(a; BYROW( HALLAR(REGEXEXTRACCION(A2; PATRON_MATRICULA; 1); a); CONTAR ); "" ) ) ) ``
HALLAR comprueba, para cada placa de la lista maestra, si está presente en la matrícula extraída, y BYROW con CONTAR resuelve fila a fila si hay coincidencia. FILTRAR se queda solo con las placas que encajan.
Funciones clave
REGEXEXTRACCION: extrae texto según una expresión regular. Su tercer argumento permite recuperar todas las coincidencias, superando la limitación de la fórmula clásica.MATRIZATEXTO: convierte un array de resultados en una cadena de texto ordenada.REPETIR: multiplica una cadena por una condición (0 o 1), un patrón muy útil para "dejar pasar" solo lo válido.UNIRCADENAS: une textos ignorando los vacíos.FILTRAR+BYROW: la combinación estrella para búsquedas inversas fila a fila.
Conclusión
El caso muestra a la perfección la evolución de Excel: de las fórmulas CSE con BUSCAR + MIN + EXTRAE a las expresiones regulares con REGEXEXTRACCION, pasando por la verificación cruzada con REPETIR y la búsqueda inversa con FILTRAR + BYROW. Tres enfoques, la misma meta, y una lección clara: cuando el patrón de tus datos es estable (como una matrícula), las expresiones regulares te ahorran muchísimo trabajo. Casos reales como este aparecen 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)