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 cintaCódigo
-
Seleccione
Herramientas
en el menú superior de la ventanaMicrosoft 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.
-
Menciona un rango
El símbolo
-
se utiliza para definir un rango. Por ejemplo, laa-z
coincide con una cadena con letras minúsculas. -
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. -
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. -
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. -
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. -
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 dosx
minúsculas consecutivas. Coincide conxx
.6.2. El
[x]{1, 3}
coincide con el patrón definido en los corchetes para un mínimo de1
a un máximo de3
veces. Coincide conx
,xx
yxxx
. -
El operador
OR
El operador
OR
|
le permite hacer coincidir entre varias opciones. Por ejemplo, lax|y|z
coincide exactamente con una de las opciones. -
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. -
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. -
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óna$
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.
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