Usar expresiones regulares en Excel VBA

Bilal Shahid 21 junio 2023
  1. Expresiones regulares en Microsoft Excel
  2. Ejemplos de expresiones regulares en Excel VBA
  3. Conclusión
Usar expresiones regulares en Excel VBA

Visual Basic para aplicaciones es un lenguaje de programación basado en eventos que se utiliza para las aplicaciones de Microsoft. Permite a los usuarios automatizar tareas y reescribir varias funcionalidades según sus requisitos.

VBA le permite al usuario realizar múltiples tareas con la ayuda de algunas declaraciones de código almacenadas en forma de macro. La macro permite al usuario reutilizar el código una y otra vez.

Expresiones regulares en Microsoft Excel

Microsoft Excel es una poderosa aplicación que permite la manipulación de datos a gran escala. Tomar información de una base de datos, manipular los datos y resumir los resultados es bastante fácil con la ayuda de Microsoft Excel.

Las expresiones regulares (Regex) se utilizan para identificar y hacer coincidir un patrón dentro de una cadena. Usando expresiones regulares en Microsoft Excel, puede manipular datos en gran medida.

Por ejemplo, puede dividir la entrada de datos según el género. Además, también puede verificar si los usuarios han ingresado el correo electrónico correcto o no.

En resumen, es bastante fácil verificar datos formateados y realizar operaciones en consecuencia.

Permitir el uso de expresiones regulares en Excel

Es imprescindible añadir una referencia VBA a "Microsoft VBScript Regular Expressions 5.5" para utilizar expresiones regulares en Microsoft Excel. Se puede hacer con los siguientes pasos:

  • Seleccione la pestaña Desarrollador en Excel
  • Elija el icono Visual Basic de la sección de la cinta Código
  • Seleccione Herramientas en el menú superior de la ventana Microsoft Visual Basic for Applications
  • Seleccione Referencias
  • Compruebe Expresiones regulares de Microsoft VBScript 5.5

Estos pasos le permiten usar expresiones regulares en el código VBA.

escribir una expresión regular

A continuación se mencionan algunas de las definiciones básicas que le ayudarán a formular una expresión regular.

  1. Menciona un rango

    El símbolo - se utiliza para definir un rango. Por ejemplo, la a-z coincide con una cadena con letras minúsculas.

  2. Haz coincidir un objeto

    Los corchetes [] se utilizan para hacer coincidir exactamente uno de los objetos mencionados dentro de los corchetes. Por ejemplo, [wxyz] coincide con una sola letra: w, x, y o z.

  3. Haga coincidir una o cero ocurrencias de un patrón

    Un signo de interrogación ? coincide con el patrón definido entre corchetes cero o una vez. El [0-9]? coincide con una cadena vacía o cualquier dígito.

  4. Haga coincidir cero o más ocurrencias de un patrón

    Un asterisco * coincide con el patrón definido entre corchetes cero o más veces. El [0-9]* coincide con una cadena vacía o cualquier cadena de dígitos.

  5. Haga coincidir una o más ocurrencias de un patrón

    Un signo más + coincide con el patrón definido entre corchetes una o más veces. El [0-9]+ coincide con al menos uno o más dígitos.

  6. Multiplicidad de un Patrón

    Para permitir que un patrón se repita varias veces, se utilizan llaves {}. Por ejemplo:

    6.1. La [x]{2} coincide con dos x minúsculas consecutivas. Coincide con xx.

    6.2. El [x]{1, 3} coincide con el patrón definido en los corchetes para un mínimo de 1 a un máximo de 3 veces. Coincide con x, xx y xxx.

  7. El operador OR

    El operador OR | le permite hacer coincidir entre varias opciones. Por ejemplo, la x|y|z coincide exactamente con una de las opciones.

  8. El operador NOT

    El operador NOT ^ no coincide con el patrón definido entre corchetes. Por ejemplo, el [^a-z] no coincide con ninguna letra minúscula.

  9. Agrupar diferentes partidos

    El paréntesis () se utiliza para agrupar los diferentes patrones de coincidencia. Por ejemplo, (^[0-9]{3})([a-z]) coincide con el patrón, que tiene tres dígitos al principio, seguidos de una letra minúscula.

  10. Patrones de anclaje

    El operador ^ se puede utilizar para hacer coincidir el comienzo de una cadena. Por ejemplo, la expresión ^a asegura que la cadena comience con una minúscula 'a'.

    El operador $ se utiliza para hacer coincidir el final de una cadena. Por ejemplo, la expresión a$ asegura que la cadena termine con 'a' minúscula.

Precedencia en expresiones regulares

Diferentes operadores tienen distinta precedencia, lo cual se ha mencionado en la siguiente tabla:

Orden Nombre Representación
1 paréntesis ( )
2 multiplicadores ? + * {m,n} {m, n}?
3 Secuencia y anclas abc ^ $
4 Alternancia |

Abreviaturas de caracteres

En las expresiones regulares se utilizan varias abreviaturas de caracteres predefinidas. Algunas de las abreviaturas de caracteres predefinidas se han mencionado en la siguiente tabla.

Abreviatura Definición
\d Para representar un solo dígito
\D Para representar un carácter que no es un dígito
\w Para representar un carácter de palabra
\W Para representar un carácter que no es una palabra
\s Para representar un carácter de espacio
\S Para representar un carácter sin espacio
\n Para representar una nueva línea

Ejemplos de expresiones regulares en Excel VBA

En los siguientes ejemplos, verifique el valor de la celda para un carácter en mayúscula y reemplácelo con una cadena vacía. En resumen, todos los caracteres en mayúsculas coinciden y se eliminan de la cadena de entrada.

Ejecutar el código como una macro

El siguiente código toma A1 como referencia de celda y elimina todas las letras mayúsculas de la cadena colocada en A1. El resultado se muestra en un Msgbox.

Por ejemplo, la cadena de entrada aAbBcC cambiará a abc en el cuadro de mensaje.

Private Sub test()
    Dim pattern As String: pattern = "[A-Z]"
    Dim replace As String: replace = ""
    Dim exp As New RegExp
    Dim cellVal As String
    Dim rangeref As Range

    Set rangeref = ActiveSheet.Range("A1")

    If pattern <> "" Then
        cellVal = rangeref.Value

        With exp
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .pattern = pattern
        End With

        If exp.test(cellVal) Then
            MsgBox (exp.replace(cellVal, replace))
        Else
            MsgBox ("Not matched")
        End If

    End If
End Sub

Bucle a través de un rango

El mismo código utilizado en el primer ejemplo se puede modificar agregando un bucle For para ejecutar la macro en un rango específico. El bucle se ejecutará para cada celda dentro del rango definido y mostrará el resultado de cada celda en un cuadro de mensaje.

Private Sub test()
    Dim pattern As String: pattern = "[A-Z]"
    Dim replace As String: replace = ""
    Dim exp As New RegExp
    Dim cellVal As String
    Dim rangeref As Range

    Set rangeref = ActiveSheet.Range("A1:A5")

    For Each cell In rangeref
        If pattern <> "" Then
            cellVal = cell.Value

            With exp
                .Global = True
                .MultiLine = True
                .IgnoreCase = False
                .pattern = pattern
            End With

            If exp.test(cellVal) Then
                MsgBox (exp.replace(cellVal, replace))
            Else
                MsgBox ("Not matched")
            End If

        End If
    Next
End Sub

Crear una función

El siguiente código se puede usar para crear una función en la celda que elimine las apariciones de letras mayúsculas en la cadena. El código es similar al utilizado en el primer ejemplo.

Se han realizado algunos cambios para convertirlo en una función.

Function cellTest(rangeref As Range) As String
    Dim pattern As String: pattern = "[A-Z]"
    Dim replace As String: replace = ""
    Dim exp As New RegExp
    Dim cellVal As String


    If pattern <> "" Then
        cellVal = rangeref.Value

        With exp
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .pattern = pattern
        End With

        If exp.test(cellVal) Then
            cellTest = exp.replace(cellVal, replace)
        Else
            cellTest = "Not matched"
        End If

    End If
End Function

Si usa cellTest(A1) donde A1 contiene DdEeleTte, la función devolverá delete.

Conclusión

No hay límite en el número de expresiones regulares que se pueden generar. Una vez que pueda identificar un formato general que necesita, cree una expresión regular para él y pruebe todas las cadenas en función de eso.

Esto puede ayudarlo a dividir sus datos en función de diferentes características.

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub