Comodines en el texto ‘Reemplazar con’ (Microsoft Excel)
Anne-Mie se da cuenta de que puede usar comodines (?) Para buscar en Excel, pero se pregunta si puede usar comodines en la cadena de reemplazo. Por ejemplo, le gustaría buscar «abde» y reemplazarlo con «aa * de», donde el asterisco representa cualquier número de caracteres, o ninguno.
La respuesta corta es que no hay forma de hacer esto en Excel, como se describe. Si solo desea convertir el segundo carácter de un valor de texto de «b» a «a», puede hacerlo con bastante facilidad:
=REPLACE(A1,2,1,"a")
Sin embargo, esto probablemente no sea lo que quiera hacer; desea una forma de utilizar comodines en el texto «reemplazar por». El término técnico para hacer tales reemplazos de cadenas se llama REGEX, que es la abreviatura de Regular Expressions. REGEX comenzó con lenguajes como Perl pero era tan poderoso que muchos otros lenguajes de programación lo agregaron.
El VBA utilizado en Excel no es una excepción. REGEX se agregó a Visual Basic 6.0, lo que significa que llegó al VBA de Excel en Excel 2003. El primer paso para usar REGEX es encenderlo. Haz esto en el Editor de VBA seleccionando Herramientas | Referencias y luego asegurarse de que haya una marca de verificación junto a la opción Expresiones regulares de Microsoft VBScript 5.5.
Habilitar esta referencia le permite crear objetos REGEX. Estos objetos poseen un método de prueba y una propiedad de patrón. Esto significa que establece la propiedad Patrón y luego el método de prueba comprueba si el patrón existe. Un objeto REGEX también tiene un método Reemplazar, que se usa para hacer reemplazos.
Antes de continuar, es importante comprender que las expresiones regulares pueden volverse muy complejas y, bueno, «geek». No hay manera de evitarlo; cómo trabajar con expresiones regulares ha sido tema de libros enteros. Afortunadamente, para los propósitos de este consejo, las expresiones son de naturaleza bastante simple. En este caso usaremos el patrón «^ ab.de $». Este patrón se refiere a una palabra que comienza (indicada por ^) con «ab» seguida de una expresión arbitraria (indicada por)
que consta de al menos un carácter (indicado por el punto) y termina (indicado por $) con «de».
Aquí está el código que implementa el uso del objeto REGEX para hacer los reemplazos reales.
Public Function SearchNReplace1(Pattern1 As String, _ Pattern2 As String, Replacestring As String, _ TestString As String) Dim reg As New RegExp reg.IgnoreCase = True reg.MultiLine = False reg.Pattern = Pattern1 If reg.Test(TestString) Then reg.Pattern = Pattern2 SearchNReplace = reg.Replace(TestString, ReplaceString) Else SearchNReplace = TestString End If End Function
Para usar esta macro, comience con las cadenas que desea cambiar en la columna A. Suponiendo que la primera cadena está en la celda A1, puede colocar lo siguiente en otra celda para obtener el texto modificado:
=SearchNReplace1("^ab.*de$","^ab","aa",A1)
Esto le dice a la macro que el patrón que desea buscar es «^ ab. * De $»
(el primer parámetro), y que desea reemplazar «^ ab» con «aa».
Esta fórmula se puede pegar en la columna y se obtiene una conversión de la columna A donde la cadena «abde» se reemplaza por «aade».
Si está utilizando una versión anterior de Excel que no le permite crear objetos REGEX, o si prefiere no hacerlo, puede crear una macro que simplemente recorra un grupo de celdas seleccionadas y busque cualquier celda que comienza con «ab» y termina con «de», y luego reemplaza la parte inicial con «aa».
Sub SearchNReplace2() Dim sFindInitial As String Dim sReplaceInitial As String Dim iLenInitial As Integer Dim sFindFinal As String Dim sReplaceFinal As String Dim iLenFinal As Integer Dim sTemp As String Dim rCell As Range sFindInitial = "ab" sReplaceInitial = "aa" sFindFinal = "de" sReplaceFinal = "de" For Each rCell In Selection sTemp = rCell.Value iLenInitial = Len(sFindInitial) iLenFinal = Len(sFindFinal) If Left(sTemp, iLenInitial) = sFindInitial And _ Right(sTemp, iLenFinal) = sFindFinal Then sTemp = Mid(sTemp, iLenInitial + 1) sTemp = Left(sTemp, Len(sTemp) - iLenFinal) sTemp = sReplaceInitial & sTemp & sReplaceFinal rCell.Value = sTemp End If Next Set rCell = Nothing End Sub
Para usar esta rutina, simplemente seleccione las celdas que desea cambiar y luego ejecute la macro. También debe realizar cambios en las variables sFindInitial, sReplaceInitial, sFindFinal y sReplaceFinal, según sea necesario.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (3303) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posterior) aquí:
link: / excelribbon-Wildcards_in_Replace_With_Text [Comodines en el texto 'Reemplazar con']
.