VBA RegEx

La “Expresión regular” de VBA RegEx es muy útil en el mundo de la programación, que se puede utilizar para validar la entrada del sitio web, la búsqueda de patrones de palabras en cadenas / textos grandes, para la búsqueda y reemplazo de cadenas.

La mayoría de nosotros estamos usando FIND, SUSTITUTE, LEFT, RIGHT junto con las funciones MID para la manipulación de cadenas en Microsoft Excel, ¿no? Sin embargo, estas funciones tienen sus propias limitaciones que no se pueden utilizar ampliamente. Tener conocimiento sobre las expresiones regulares de VBA le ahorrará mucho tiempo en su día a día. Las expresiones regulares tienen una forma corta como "RegEx" (o Regex) en VBA. En este tutorial, vamos a echar un vistazo a algunos de los RegEx con su utilización.

Puede usar el objeto VBA RegEx que ya está creado en la biblioteca Microsoft VBScript Regular Expressions. Puede navegar por esta biblioteca haciendo clic en Herramientas - Referencia - Expresiones regulares de Microsoft VBScript.

También puede crear un objeto RegEx utilizando la función CreateObject en VBA. Parece una forma más conveniente porque no siempre tiene que consultar la biblioteca de expresiones regulares VBScript en este caso.

Vea el código a continuación:

 Dim regex como Object Set regex = CreateObject ("VBScript.RegExp") 

Este código le permitirá crear y acceder a objetos RegEx en su macro. Personalmente prefiero este camino sobre el primero debido a su rigidez.

La función RegEx permite manipular lo siguiente en una cadena larga.

  • Comodines como *, ? etc.
  • Expresiones agrupadas junto con comodines.

RegEx tiene los siguientes parámetros / propiedades:

  1. Patrón : el patrón definido en RegEx en el que desea realizar operaciones.
  2. IgnoreCase : ignora las mayúsculas y minúsculas (mayúsculas / minúsculas son lo mismo en una cadena).
  3. Global : permite encontrar todas las coincidencias posibles si se establece en TRUE. Si se establece como FALSO, solo encuentra la primera coincidencia.
  4. MultiLine : permite hacer coincidir el patrón en una cadena que se extiende a lo largo de varias líneas.

RegEx facilita las siguientes tres operaciones:

  • Prueba : prueba si el patrón mencionado está presente en la cadena o no. Si el presente devuelve VERDADERO, de lo contrario FALSO.
  • Reemplazar : reemplaza el patrón original con el otro.
  • Ejecutar : devuelve todos los patrones coincidentes buscados.

¿Cómo utilizar Excel VBA RegEx?

Aprenderemos cómo usar Excel VBA Regular Expression con algunos ejemplos.

Puede descargar esta plantilla Excel de VBA RegEx aquí - Plantilla Excel de VBA RegEx

Excel VBA RegEx - Ejemplo # 1

Aquí, comprobará si el patrón mencionado está presente en el texto utilizando RegEx.Test.

Siga los pasos a continuación para usar VBA RegEx.

Paso 1: defina un nuevo subprocedimiento para crear una macro.

Código:

 Sub RegEx_Ex1 () End Sub 

Paso 2: Defina dos variables RegEx como un Objeto que se puede usar para crear un objeto RegEx y Str como una cadena.

Código:

 Sub RegEx_Ex1 () Dim RegEx como objeto, Str como String End Sub 

Paso 3: Crear un objeto RegEx usando la función CreateObject.

Código:

 Sub RegEx_Ex1 () Dim RegEx como objeto, Str como String Set RegEx = CreateObject ("VBScript.RegExp") End Sub 

Paso 4: Agregue el patrón que se probará con la función RegEx.

Código:

 Sub RegEx_Ex1 () Dim RegEx como objeto, Str como String Set RegEx = CreateObject ("VBScript.RegExp") Con RegEx .Pattern = "(0-9) +" Fin con End Sub 

Paso 5: Defina la cadena dentro de la cual debemos verificar el patrón dado.

Código:

 Sub RegEx_Ex1 () Dim RegEx como objeto, Str como String Set RegEx = CreateObject ("VBScript.RegExp") Con RegEx .Pattern = "(0-9) +" End With Str = "Mi número de bicicleta es MH-12 PP- Sub final de 6145 " 

Paso 6: Use RegEx.Test para probar si el patrón dado está presente dentro de la variable llamada Str. Además, use Debug.Print para imprimir el resultado (verdadero o falso) en la ventana inmediata.

Código:

 Sub RegEx_Ex1 () Dim RegEx como objeto, Str como String Set RegEx = CreateObject ("VBScript.RegExp") Con RegEx .Pattern = "(0-9) +" End With Str = "Mi número de bicicleta es MH-12 PP- 6145 "Debug.Print RegEx.Test (Str) End Sub 

Paso 7: presiona F5 o el botón Ejecutar para ejecutar el código y ver el resultado. (Presione CTRL + G para abrir la ventana Inmediato)

Aquí, hemos creado un objeto RegEx. Luego, con VBA RegEx, hemos verificado si el patrón dado ("(0-9) +") que incluye todos los números / combinación de números del 0 al 9 está presente en la cadena definida con la ayuda de RegEx.Test ( Str). La salida "Verdadero" en la ventana inmediata muestra que el patrón "(0-9) +" está presente en una cadena dada.

Excel VBA RegEx - Ejemplo # 2

Aquí, verá cómo puede reemplazar una cadena con otra usando RegEx.Replace.

Siga los pasos a continuación para usar VBA RegEx.

Paso 1: defina una nueva subcadena para crear una macro.

Código:

 Sub RegEx_Ex2 () End Sub 

Paso 2: Igual que en el primer ejemplo, defina dos variables RegEx como un Objeto que puede contener el valor del objeto RegEx y Str que mantendrá el valor de cadena que definirá.

Código:

 Sub RegEx_Ex2 () Dim RegEx como objeto, Str como String End Sub 

Paso 3: defina el objeto RegEx y configúrelo como variable RegEx utilizando la función CreateObject.

Código:

 Sub RegEx_Ex2 () Dim RegEx como objeto, Str como conjunto de cadenas RegEx = CreateObject ("VBScript.RegExp") End Sub 

Paso 4: inserte el patrón que desea reemplazar con la función .Pattern.

Código:

 Sub RegEx_Ex2 () Dim RegEx como objeto, Str como String Set RegEx = CreateObject ("VBScript.RegExp") Con RegEx .Pattern = "123" Finalizar con End Sub 

Paso 5: Use .GLOBAL = TRUE, que si TRUE permite reemplazar todos los patrones coincidentes en una cadena dada. Si FALSE reemplaza solo el primer patrón coincidente.

Código:

 Sub RegEx_Ex2 () Dim RegEx como objeto, Str como String Set RegEx = CreateObject ("VBScript.RegExp") Con RegEx .Pattern = "123" .Global = True 'Si es FALSE, reemplaza solo la primera cadena coincidente' End With End Sub 

Paso 6: Después de finalizar con, defina la cadena con la que desea hacer coincidir y reemplace el patrón.

Código:

 Sub RegEx_Ex2 () Dim RegEx como objeto, Str como String Set RegEx = CreateObject ("VBScript.RegExp") Con RegEx .Pattern = "123" .Global = True 'Si es FALSE, reemplaza solo la primera cadena coincidente' End With Str = "123-654-000-APY-123-XYZ-888" End Sub 

Paso 6: Use RegEx.Replace para reemplazar el valor del patrón en la cadena dada por otro texto.

Código:

 Sub RegEx_Ex2 () Dim RegEx como objeto, Str como String Set RegEx = CreateObject ("VBScript.RegExp") Con RegEx .Pattern = "123" .Global = True 'Si es FALSE, reemplaza solo la primera cadena coincidente' End With Str = "123-654-000-APY-123-XYZ-888" Debug.Print RegEx.Replace (Str, "Replaced") End Sub 

Aquí, queríamos que el patrón "123" fuera reemplazado por algún otro trozo de cuerda. RegEx.Replace permite reemplazar el valor del patrón con la pieza de cadena (hemos definido "Reemplazado"). Por favor, eche un vistazo a .Global = TRUE. Que es una declaración condicional. Si Global = TRUE, la función Reemplazar reemplaza todos los patrones coincidentes con la otra cadena. Si GLOBAL = FALSE, la función Reemplazar reemplaza solo el primer patrón coincidente y el resto se descuidan.

Paso 7: presione el botón Ejecutar o F5 para ejecutar este código y ver la salida en la ventana Salida inmediata.

Excel VBA RegEx - Ejemplo # 3

Aquí, verá cómo puede encontrar todos los patrones coincidentes en una cadena usando RegEx.Execute.

Siga los pasos a continuación para usar Excel VBA RegEx.

Paso 1: defina un nuevo subprocedimiento para agregar la macro.

Código:

 Sub RegEx_Ex3 () End Sub 

Paso 2: siga los pasos igual que en los dos ejemplos anteriores para definir una expresión regular y una variable que pueda contener el valor de la cadena.

Código:

 Sub RegEx_Ex3 () Dim RegEx como objeto, Str como String Set RegEx = CreateObject ("VBScript.RegExp") End Sub 

Paso 3: inserte un patrón que desea que se ejecute y coincida en la cadena dada.

Código:

 Sub RegEx_Ex3 () Dim RegEx como objeto, Str como String Set RegEx = CreateObject ("VBScript.RegExp") Con RegEx .Pattern = "123-XYZ" Fin con End Sub 

Paso 4: Use .GLOBAL = TRUE para que todas las coincidencias se capturen en la cadena dada.

Código:

 Sub RegEx_Ex3 () Dim RegEx como objeto, Str como String Set RegEx = CreateObject ("VBScript.RegExp") Con RegEx .Pattern = "123-XYZ" .Global = True End With End Sub 

Paso 5: defina una cadena después de Finalizar con bajo la cual debe usar Ejecutar y encontrar todos los patrones coincidentes.

Código:

 Sub RegEx_Ex3 () Dim RegEx como objeto, Str como String Set RegEx = CreateObject ("VBScript.RegExp") Con RegEx .Pattern = "123-XYZ" .Global = True End con Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "End Sub 

Paso 6: Ahora, use Ejecutar en la variable llamada cadena para descubrir todas las coincidencias asociadas con un patrón dado.

Código:

 Sub RegEx_Ex3 () Dim RegEx como objeto, Str como String Set RegEx = CreateObject ("VBScript.RegExp") Con RegEx .Pattern = "123-XYZ" .Global = True End con Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Establecer coincidencias = RegEx.Execute (Str) End Sub 

Paso 7: use el bucle For para imprimir el valor de todos los patrones coincidentes en la ventana de salida inmediata.

Código:

 Sub RegEx_Ex3 () Dim RegEx como objeto, Str como String Set RegEx = CreateObject ("VBScript.RegExp") Con RegEx .Pattern = "123-XYZ" .Global = True End con Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Establecer coincidencias = RegEx.Execute (Str) para cada coincidencia En coincidencias Debug.Print Match.Value Next Match End Sub 

Paso 8: Ejecute este código presionando F5 o el botón Ejecutar y vea la salida en la ventana de salida inmediata.

Este código imprime todo el número de coincidencias para el patrón que se define.

Cosas para recordar

  • La expresión regular de VBA solo se puede usar para descubrir las cadenas. Obviamente, para valores numéricos, no necesitamos tal función. Todos los valores numéricos considerados en cada uno de los tres ejemplos anteriores se definen realmente como una cadena.
  • Se supone que Excel VBA RegEx se utilizará para la manipulación de cadenas siempre que haya una gran cantidad de datos. No usar VBA RegEx reduce la eficiencia del programa.
  • VBA RegEx falla cuando hay escenarios en los que un patrón se repite n número de veces o infinitas veces por ese motivo.

Artículos recomendados

Esta ha sido una guía para VBA RegEx. Aquí discutimos cómo usar Excel VBA RegEx junto con algunos ejemplos prácticos y una plantilla de Excel descargable. También puede consultar nuestros otros artículos sugeridos:

  1. ¿Cómo usar VBA Reemplazar en Excel?
  2. Uso de Insertar comentario en Excel
  3. Creando VBA TIMER en Excel
  4. Fórmula IF anidada en Excel

Categoría: