Ankur tiene una hoja de trabajo que tiene miles de celdas que contienen varios términos. Necesita eliminar una gran cantidad de esos términos y las celdas en las que aparecen. Por ejemplo, es posible que deba eliminar todas las celdas que contienen términos como «google», «youtube», «linkedin» y muchos otros términos. Ankur sabe que puede buscar y reemplazar cada uno de estos términos, pero eso es bastante tedioso. Se pregunta si hay alguna manera de identificar todos los términos que se eliminarán y luego hacer que Excel los elimine de esas miles de celdas.

Si necesita hacer este tipo de cosas de forma regular, la mejor solución es utilizar una macro. El truco es cómo especifica, en la macro, exactamente lo que desea reemplazar. Una forma es rellenar la información en una matriz, como en el siguiente ejemplo:

Sub RemoveTerms1()

Dim vTerm As Variant     Dim vArray As Variant

vArray = Array("google", "youtube", "linkedin")

For Each vTerm in vArray         Selection.Replace What:=vTerm, _           Replacement:="", LookAt:=xlPart     Next vTerm End Sub

Los términos que se buscan se colocan en la matriz vArray y luego se recorre cada miembro de la matriz (cada término). El método Reemplazar se usa con el objeto Selección para hacer los reemplazos reales. La macro no elimina celdas; simplemente elimina cualquier texto que coincida con el término. Al reemplazar, la búsqueda no distingue entre mayúsculas y minúsculas, de modo que «google» coincide con «Google».

Dado que se utiliza el objeto Selección, es importante asegurarse de seleccionar la lista que desea procesar antes de ejecutar la macro.

Si no lo hace, no se reemplaza nada.

Si lo prefiere, puede crear una macro que extraiga los términos de un rango de celdas en el libro de trabajo.

Sub RemoveTerms2()

Dim c As Range     Dim rngSource As Range     Dim vTerm As Variant     Dim arrTerms As Variant     Dim i As Integer

i = -1     arrTerms = Array()

For Each c In Range("D1:D9").Cells         If Trim(c.Value) > "" Then             i = i + 1             ReDim Preserve arrTerms(i)

arrTerms(i) = Trim(c.Value)

End If     Next c

On Error Resume Next     Set rngSource = Application.InputBox( _                     Prompt:="Please select Range", _                     Title:="Removing Cells Containing Terms", _                     Default:=ActiveSheet.UsedRange.Address, Type:=8)

On Error GoTo 0     If rngSource Is Nothing Then         MsgBox ("You didn't specify a range to process")

Else         For Each vTerm in arrTerms             rngSource.Replace What:=vTerm, _               Replacement:="", LookAt:=xlWhole         Next vTerm     End If End Sub

Esta macro extrae los términos de búsqueda del rango D1: D9 y luego le solicita que elija el rango de celdas que desea procesar. Utiliza el mismo método Reemplazar que se utilizó en la macro anterior, excepto que especifica que el parámetro LookAt sea xlWhole. Esto significa que el término de búsqueda debe coincidir con toda la celda para poder eliminarlo. Sin embargo, los términos todavía se consideran insensibles a mayúsculas y minúsculas.

Tenga en cuenta que los ejemplos hasta ahora no eliminan ninguna celda; simplemente eliminan el contenido de las celdas. En muchos casos, esto es exactamente lo que desea porque no desea interrumpir el diseño de la hoja de trabajo real. Si realmente desea eliminar celdas, entonces no usaría el método Reemplazar. En su lugar, puede activar la comparación de texto expandido y usar el operador Me gusta para ver si hay una coincidencia.

Option Compare Text

Sub RemoveTerms3()

Dim c As Range     Dim rngSource As Range     Dim vTerm As Variant     Dim arrTerms As Variant     Dim i As Integer     Dim sLook As String

i = -1     arrTerms = Array()

For Each c In Range("D1:D9").Cells         If Trim(c.Value) > "" Then             i = i + 1             ReDim Preserve arrTerms(i)

arrTerms(i) = Trim(c.Value)

End If     Next c

On Error Resume Next     Set rngSource = Application.InputBox( _                     Prompt:="Please select Range", _                     Title:="Removing Cells Containing Terms", _                     Default:=ActiveSheet.UsedRange.Address, Type:=8)

On Error GoTo 0     If rngSource Is Nothing Then         MsgBox ("You didn't specify a range to process")

Else         For Each vTerm in arrTerms             sLook = "" & vTerm & ""

For Each c In rngSource                 If c.Value Like sLook Then c.Delete             Next         Next vTerm     End If End Sub

Tenga en cuenta que los términos de búsqueda todavía se extraen del rango D1: D9 y todavía se le pide el rango que desea procesar. Sin embargo, a partir de ahí, el proceso es diferente: la macro examina cada celda y, si hay una coincidencia parcial, la celda se elimina.

Para que esta variación de la macro funcione correctamente, deberá incluir la línea Option Compare Text fuera del procedimiento en sí.

Esto indica a VBA que habilite las palabras clave (como Me gusta) que permiten comparar texto.

_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 (13373) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365.