Eliminación de celdas que contienen términos específicos (Microsoft Excel)
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.