Validar email en Excel con macros vba
Cuando capturamos datos de personas, invariablemente tenemos que añadir un correo electrónico para tener más vías de contacto. A partir de esa premisa, al capturar los datos de manera manual, siempre existe el riesgo humano de equivocarnos en capturar algún registro.
Es por eso que en este artículo les comparto una macro para que les pueda ayudar en validar si un correo electrónico está mal formado, es decir, que no cumpla con los requisitos de [usuario] @ [dominio]. Les compartos ejemplos para validar los correos mediante un formulario o con una función (UDF) que incluso podrá ser usada en la hoja de cálculo como si fuera una función de Excel, tipo BUSCARV, SUMAR.SI, etc.
Ver video Validar email en Excel con macros y función UDF
Antes de comenzar, activa la referencia a Expresiones regulares
No dice Wikipedia que Una expresión regular, a menudo llamada también regex, es una secuencia de caracteres que forma un patrón de búsqueda, principalmente utilizada para la búsqueda de patrones de cadenas de caracteres u operaciones de sustituciones.
En el código vba de la macro encontraremos dos expresiones regulares, la primera nos validará correo de tipo usuario@dominio.com.
Expresión 1: “^[\w-\.]+@\w+\.\w+$”
La segunda expresión validará los tipos de correo usuario@dominio.com.mx.
Expresión 2: “^([a-zA-Z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$”
Por lo anterior, debemos entrar al IDE de vba con la combinación de teclas [Ctrl] + [F11] y nos dirigimos al menú Herramientas > Referencias, y activamos la librería Microsoft VBScript Regular Expresions 1.0. Esto nos ayudará a poder una expresión regular para validar el correo electrónico.
Figura 1. Activar la libería para usar expresiones regulares es nuestro código vba.
Función personalizada (UDF)
Usando la función valida_email_fx(correo) en tu hoja de cálculo, basta con poner una dirección en una celda y la función devuelve VERDADERO o FALSO dependiendo de si el correo es válido o no.
Figura 2. UDF para validar email en Excel.
Validar email en Formulario
Ahora bien, si la captura de datos es mediante formulario, podemos usar un procedimiento que valide el correo electrónico, así como también podemos usar la misma función usada en la hoja de cálculo, pero directamente en el formulario.
Figura 3. Validar email en Excel mediante formulario.
Código vba de las macros
Para la función personalidad UDF usaremos la siguiente macro en el módulo UDF.
'*************************************************************************** 'Referencias: Microsoft vb Script Regular Expressions ' http://www.tipsntracks.com/117/validate-an-email-address-using-regular-expressions.html ' https://es.wikipedia.org/wiki/Expresi%C3%B3n_regular '*************************************************************************** Function valida_email_fx(email As String) As Boolean Application.Volatile 'Declaramos variables Dim oReg As RegExp ' Crea un Nuevo objeto RegExp Set oReg = New RegExp On Error GoTo ErrorHandler 'Expresión regular para validar direcciones .com 'oReg.Pattern = "^[\w-\.]+@\w+\.\w+$" ' Expresión regular para validar direcciones .com.mx oReg.Pattern = "^([a-zA-Z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$" ' Comprueba y Retorna TRue o false valida_email_fx = oReg.Test(email) Set oReg = Nothing Exit Function 'En caso de error ErrorHandler: MsgBox "Ha ocurrido un error: ", vbExclamation, "EXCELeINFO" End Function
Y en el formulario tendremos el siguiente código.
'*************************************************************************** 'Referencias: Microsoft vb Script Regular Expressions ' http://www.tipsntracks.com/117/validate-an-email-address-using-regular-expressions.html ' https://es.wikipedia.org/wiki/Expresi%C3%B3n_regular '*************************************************************************** Private Sub CommandButton1_Click() 'Declaramos la variable oReg Dim oReg As RegExp ' Crea un Nuevo objeto RegExp Set oReg = New RegExp On Error GoTo ErrorHandler ' Expresión regular para validar direcciones .com 'oReg.Pattern = "^[\w-\.]+@\w+\.\w+$" ' Expresión regular para validar direcciones .com.mx oReg.Pattern = "^([a-zA-Z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$" 'Comprobamos si el email es válido email = oReg.Test(Me.txtEmail.Value) If email = True Then MsgBox "email válido.", vbInformation, "EXCELeINFO" Else MsgBox "email inválido.", vbExclamation, "EXCELeINFO" End If Exit Sub 'En caso de error ErrorHandler: MsgBox "Ha ocurrido un error: ", vbExclamation, "EXCELeINFO" End Sub Private Sub CommandButton2_Click() Dim valida valida = valida_email_fx(Me.txtEmail.Value) If valida = True Then MsgBox "email válido.", vbInformation, "EXCELeINFO" Else MsgBox "email inválido.", vbExclamation, "EXCELeINFO" End If End Sub
Descargar el ejemplo
Si deseas puede descargar el ejemplo con macros incluidas para añadirlas a tus proyectos.