Microsoft Excel brinda a los usuarios una variedad de alternativas cuando se trata de reemplazar un texto por otro, incluida la herramienta Buscar y reemplazar y algunos métodos de sustitución. ¿Por qué usar expresiones regulares para agregar complejidad a la situación? Es porque las capacidades integradas de Excel solo pueden procesar las cadenas exactas que proporciona. Las expresiones regulares son esenciales para encontrar cadenas que se ajusten a un patrón y reemplazarlas con cadenas diferentes. En este artículo, mostraré cómo crear una función definida por el usuario con Excel VBA para buscar y reemplazar patrones RegEx.
Descargar libro de práctica
Puede descargar el siguiente libro de ejercicios para practicar mientras lee este artículo.
Introducción a una función definida por el usuario en Excel VBA que encontrará y reemplazará patrones RegEx
Aunque MS Excel no tiene una función RegEx, el Objeto expresión regular hay en Excel VBA. Entonces podemos usarlo para crear una función para encontrar y reemplazar patrones de expresiones regulares.
Todos sabemos que las funciones de Excel consisten en sus nombres y los argumentos entre paréntesis. De la misma manera, crearemos una función RegEx.
Para saber cómo crear una función definida por el usuario en Excel, marque este artículo.
Código VBA:
Public Function Find_Replace_RegEx(main_txt As String, pat As String, replace_txt As String, Optional rep_replace As Integer = 0, Optional case_sense As Boolean = True) As String
Dim text_res, find_text As String
Dim match_SL, starting_pos As Integer
On Error GoTo ErrHandl
text_res = main_txt
Set Xregexp = CreateObject("VBScript.RegExp")
Xregexp.pattern = pat
Xregexp.Global = True
Xregexp.MultiLine = True
If True = case_sense Then
Xregexp.ignorecase = False
Else
Xregexp.ignorecase = True
End If
Set Xmatch = Xregexp.Execute(main_txt)
If 0 < Xmatch.Count Then
If (0 = rep_replace) Then
text_res = Xregexp.Replace(main_txt, replace_txt)
Else
If rep_replace <= Xmatch.Count Then
starting_pos = 1
For match_SL = 0 To rep_replace - 2
starting_pos = InStr(starting_pos, main_txt, Xmatch.Item(match_SL), vbBinaryCompare) + Len(Xmatch.Item(match_SL))
Next match_SL
find_text = Xmatch.Item(rep_replace - 1)
text_res = Left(main_txt, starting_pos - 1) & Replace(main_txt, find_text, replace_txt, starting_pos, 1, vbBinaryCompare)
End If
End If
End If
Find_Replace_RegEx = text_res
Exit Function
ErrHandl:
Find_Replace_RegEx = CVErr(xlErrValue)
End Function
estamos agradecidos a Bits capaces a para este código.
⦿ Objetivo:
Después de hacer coincidir un determinado patrón en una cadena, reemplaza el texto coincidente con un texto específico.
⦿ Sintaxis:
RegExpReplace(main_txt, pat, replace_txt, [rep_replace], [case_sense])
⦿ Argumentos:
- principal_txt = la cadena de texto principal, donde buscará que coincida con un patrón determinado.
- palmadita= la expresión regular para que coincida (regex significa expresión regular)
- reemplazar_txt= después de hacer coincidir el patrón, la función reemplazará el texto coincidente con este texto especificado.
- rep_replace= es el número de instancias que indica qué instancia de coincidencia reemplazará la función. Haremos que este argumento sea opcional, lo que significa que si no menciona este argumento dentro de la función, todo el texto coincidente se reemplazará de manera predeterminada.
- case_sense=otro argumento opcional (booleano) que vamos a agregar. FALSO significa que la coincidencia no distingue entre mayúsculas y minúsculas. Pero si escribe TRUE u omite esto, la función distingue entre mayúsculas y minúsculas de forma predeterminada.
⦿ Disponible en:
Puede crear esta función VBA en todas las versiones de Excel 365 y Excel 2010 o versiones posteriores.
Nota:
- Esta función devolverá el texto original si no se encuentra ningún patrón que coincida.
- Use comillas dobles para proporcionar patrones de expresiones regulares en una fórmula directamente.
3 ejemplos para buscar y reemplazar patrones RegEx en Excel usando la función VBA definida por el usuario
Ahora, veremos 3 aplicaciones del Buscar_reemplazar_regex función que hemos construido en Excel VBA.
1. Reemplace cadenas que coincidan con un patrón RegEx dado
Mira la siguiente imagen. Tenemos algunas cuerdas. Ahora veremos si alguna de las partes de estas cadenas coincide con un patrón específico. Si es así, la función reemplazará esa parte con una cadena dada.
- Hemos especificado el patrón en celda B13. Está-
- El texto de reemplazo está en celda C13 cual es- XY-XYZ-WXYZ
- La fórmula necesaria para realizar el trabajo es:
=Find_Replace_RegEx(B5,$B$13,$C$13,,)
Puede mantener el último entre comas o simplemente omitirlo. Mantenerlos le recuerda que hay dos argumentos más en esta función que son opcionales pero que también puede agregarlos.
2. Buscar y reemplazar todos los números
En este ejemplo, reemplazaremos todos los números con esta función.
- El reemplazo será- ?
- Fórmula para aplicar-
=Find_Replace_RegEx(B5,$B$13,$C$13,3,FALSE)
Observa la siguiente imagen para ver los resultados.
3. Busque y reemplace caracteres en una instancia específica que coincida con un patrón RegEx
los rep_replace El argumento está configurado para reemplazar todas las coincidencias. Pero si lo desea, puede reemplazar solo una instancia específica. Por ejemplo, mira la siguiente imagen. Hemos reemplazado la tercera instancia aquí.
=Find_Replace_RegEx(B5,"\d+","?",3,FALSE)
O,
=Find_Replace_RegEx(B5,$B$13,$C$13,3,FALSE)
Algunos patrones RegEx comunes para usar en Excel
Aquí hay algunos comunes patrones RegEx que puedes usar.
Conclusión
Espero que este artículo le resulte útil para buscar y reemplazar patrones de expresiones regulares en Excel con la función VBA. Si la función no funciona en su libro de Excel, vaya a la opción de Internet y mantenga nuestro sitio en la lista de confianza. Si tiene algún problema, háganoslo saber en el cuadro de comentarios. ¡Feliz Excelencia!