VBA Regex

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on febrero 22, 2022

Este tutorial demostrará cómo usar Regex en VBA.

¿Qué es Regex?

Regex significa expresión regular. Una expresión regular es un patrón compuesto por una secuencia de caracteres que se puede utilizar para encontrar un patrón coincidente en otra cadena. Para usar Regex en VBA tiene que usar el objeto RegExp.

Un patrón como [A-C] puede utilizarse para buscar y hacer coincidir una letra mayúscula de la A a la C de una secuencia. Los patrones Regex tienen su propia sintaxis y pueden ser construidos usando un carácter o una secuencia de caracteres.

Coincidencia de caracteres

La siguiente tabla muestra la sintaxis que le permitirá construir patrones Regex.

Sintaxis del patrón Descripción Ejemplo Coincidencias encontradas
. Coincide con cualquier carácter único excepto vbNewLine f.n fan, fon, f@n, fwn
[caracteres] Coincide con cualquier carácter único entre corchetes[] [fn] Sólo coincide con «f» o «n» en fan
[^caracteres] Coincide con cualquier carácter que no esté entre corchetes[] [^fn] Así que coincidiría con «j» en «fjn»
[inicio-fin] Coincide con cualquier carácter que forme parte del rango entre corchetes[] [1-5] Coincidiría con «4» y «5» en «45»
\w Coincide con los caracteres alfanuméricos y el guión bajo, pero no con el carácter de espacio \w Coincidiría con «c» en «,c»
\W Coincide con cualquier carácter no alfanumérico y el guión bajo \W Coincidiría con «@» en «bb@bb»
\s Coincide con cualquier carácter de espacio en blanco, como espacios y tabulaciones \s Coincidiría con » » en «This is»
\S Coincide con cualquier carácter que no sea un espacio en blanco \S Coincidiría con «T» y «h» en «T h»
\d Coincide con cualquier dígito decimal \d Coincidiría con «7» en «a7h»
\D Coincide con cualquier dígito no decimal \D Coincidiría con la j en «47j»
\ Escapa a los caracteres especiales, lo que le permite buscarlos \. Coincidiría con «.» en «59.pQ»
\t Pestaña \t Coincidiría con un carácter de tabulación
\r Retorno de carro (Return) \r Coincidiría con un retorno de carro (vbCr)
\n vbNewLine(vbTab) \n Coincidiría con una nueva línea

Cuantificadores

Puede utilizar cuantificadores para especificar cuántas veces quiere que el patrón coincida con la cadena.

Cuantificador Descripción Ejemplo Coincidencias encontradas
* Coincide con cero o más ocurrencias fn*a fna, fa, fnna, fnnna, fnfnnna
+ Coincide con una o más ocurrencias fn+a fna, fnna, fnfnna
? Coincide con cero o uno fn?a fa, fna
{n} Coincide con «n» veces d\W{4} Coincidiría con «d….» en «d….&5hi»
{n,} Coincide al menos «n» veces d\W{4,} Coincidiría con «d….&» en «d….&5hi»
{n,m} Coincide entre n y m número de veces d\W{1,8} Coincidiría con «d….&&&&» en «d….&&&&5hi»

Agrupación

La agrupación o captura le permite utilizar un patrón para capturar y extraer una parte de una cadena. De este modo, no sólo se compara el patrón, sino que se captura la parte de la cadena que coincide con el patrón.

Patrón Descripción Ejemplo Coincidencias encontradas y capturadas
(expresión) Agrupa y captura el patrón entre paréntesis (\W{4}) Agruparía y capturaría «@@@@» de «1@@@@1jlmba»

Cómo utilizar Regex en VBA

Para utilizar Regex en VBA, primero tiene que establecer la referencia en el editor VBE. En el editor VBE, vaya a Herramientas > Referencias > Expresiones regulares

de Microsoft VBScript.

uso Regex vbScript

 

Estas son las propiedades del objeto RegExp:

  • Pattern – El patrón que va a utilizar para comparar con la cadena.
  • IgnoreCase  – Si es Verdadero, entonces la coincidencia ignora las mayúsculas y minúsculas.
  • Global – Si es True, entonces se encuentran todas las coincidencias del patrón en la cadena. Si es Falso, sólo se encuentra la primera coincidencia.
  • MultiLine – Si es Verdadero, la coincidencia del patrón ocurre a través de los saltos de línea.

Estos son los métodos del objeto RegExp:

  • Test – Busca un patrón en una cadena y devuelve True si se encuentra una coincidencia.
  • Replace – Reemplaza las ocurrencias del patrón con la cadena de reemplazo.
  • Execute – Devuelve las coincidencias del patrón con la cadena.

Comprobación de la coincidencia de un patrón con una cadena

Puede utilizar el método Test para comprobar si un patrón coincide con una secuencia de la cadena de entrada. El resultado es True si se encuentra una coincidencia. El siguiente código le mostrará cómo probar un patrón contra una cadena:

Sub Regex_Prueba_A_Patron()
 
Dim cadena1 As String
Dim expresion1 As Object
Set expresion1 = New RegExp
 
expresion1.Pattern = "f....a"
 
cadena1 = "000111fjo88a8"
 
Debug.Print expresion1.Test(cadena1)
 
End Sub

El resultado es:

Regex Prueba Patron

 

Reemplazar un patrón en una cadena

Puede utilizar el método Replace para reemplazar la primera instancia de un patrón coincidente en una cadena o todas las instancias de un patrón coincidente en una cadena. Si Global se establece en False, sólo se reemplaza la primera instancia. El siguiente código le mostrará cómo reemplazar un patrón en una cadena:

Sub RegexReemplazarUnPatronEnCadena()
Dim cadena1 As String
Dim expresion1 As Object
Set expresion1 = New RegExp
 
expresion1.Pattern = "Este es el número"
expresion1.Global = False
cadena1 = "Este es el número 718901"
 
Debug.Print expresion1.Replace(cadena1, "Este es el nuevo número")
End Sub

El resultado es:

Regex Reemplazar Patron En Cadena

 

Para reemplazar sólo la porción numérica de la cadena utilizada anteriormente, se utilizaría el siguiente código:

Sub RegexReemplazarPatronSoloParte()
Dim cadena1 As String
Dim expresion1 As Object
Set expresion1 = New RegExp
 
expresion1.Pattern = "[^\D]+"
expresion1.Global = False
cadena1 = "Este es el número 718901"
 
Debug.Print expresion1.Replace(cadena1, "777192")
End Sub

El resultado es:

Regex Reemplazar Patron Solo Parte

 

Para reemplazar todas las instancias de un determinado patrón en una cadena, se pondría el valor global a True. El siguiente código muestra cómo reemplazar cada instancia de -A1289C- en la cadena:

Sub RegexRemplazarTodasOcurrenciasDeUnPatron()
Dim cadena1 As String
Dim expresion1 As Object
Set expresion1 = New RegExp
 
expresion1.Pattern = "\W\A\d+C\W"
expresion1.Global = True
cadena1 = "ABC-A1289C-ABC-A1289C-ABC"
 
Debug.Print expresion1.Replace(cadena1, "IJK")
End Sub

 

Regex Remplazar Todas Ocurrencias Patron

Comparación y visualización de un patrón en una cadena

Puede utilizar el método Execute para hacer coincidir una o todas las instancias de un patrón dentro de una cadena. El siguiente código muestra cómo hacer coincidir y mostrar todas las instancias del patrón de la cadena:

Sub RegexCompararVisualizarPatronEnCadena()
Dim cadena1 As String
Dim expresion1 As Object
 
Set expresion1 = New RegExp
 
expresion1.Pattern = "A.C"
expresion1.Global = True
expresion1.IgnoreCase = IgnoreCase
cadena1 = "ABC-A1289C-ADC-A1289C-AJC"
 
Set coincidencias = expresion1.Execute(cadena1)
 
For Each coincidencia In coincidencias
  Debug.Print coincidencia.Value
Next
 
End Sub

El resultado es:

Regex Comparar Coincidencias Patron

 

Supongamos que sólo queremos coincidir con -ADC- de la cadena anterior. El siguiente código muestra cómo hacer coincidir y mostrar sólo -ADC- de la cadena:

Sub RegexCompararCoincidenciasPatronEnCadena()
Dim cadena1 As String
Dim expresion1 As Object
 
Set expresion1 = New RegExp
 
expresion1.Pattern = "\-\A.C\-"
expresion1.Global = False
expresion1.IgnoreCase = IgnoreCase
cadena1 = "ABC-A1289C-ADC-A1289C-AJC"
 
Set coincidencias = expresion1.Execute(cadena1)
 
For Each coincidencia In coincidencias
  Debug.Print coincidencia.Value
Next
 
End Sub

Regex Comparar Coincidencias Patron Ejemplo2

 

Regex puede tomar algún tiempo para aprender, pero es una herramienta extremadamente poderosa para identificar/manipular cadenas de texto. También se utiliza ampliamente en todos los lenguajes de programación.

vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples