删除包含特定术语的单元格(Microsoft Excel)
Ankur有一个工作表,其中包含成千上万个包含各种术语的单元格。他需要删除大量这些术语及其出现的单元格。例如,他可能需要删除所有包含诸如“ google”,“ youtube”,“ linkedin”之类的术语以及许多其他术语的单元格。 Ankur知道他可以搜索并替换每个术语,但这很繁琐。他想知道是否有一种方法可以识别所有要删除的术语,然后让Excel从那数千个单元格中删除它们。
如果您需要定期执行此类操作,那么最好的解决方案是使用宏。诀窍是如何在宏中指定要替换的内容。一种方法是将信息填充到数组中,如以下示例所示:
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
将要查找的术语放置在vArray数组中,然后逐步遍历数组的每个成员(每个术语)。 Replace方法与Selection对象一起使用以进行实际替换。宏不会删除单元格;它只会删除与该词匹配的所有文本。替换时,搜索不区分大小写,因此“ google”与“ Google”匹配。
由于使用了Selection对象,因此在实际运行宏之前,请确保选择了要处理的列表,这一点很重要。
如果您不这样做,那么什么也不会替代。
如果愿意,可以创建一个宏来从工作簿的一系列单元格中提取术语。
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
此宏从范围D1:D9中提取搜索词,然后提示您选择要处理的单元格范围。除了将LookAt参数指定为xlWhole之外,它使用与上一个宏相同的Replace方法。这意味着搜索词需要与整个单元格匹配才能被删除。但是,这些术语仍被认为不区分大小写。
请注意,到目前为止,这些示例实际上并未删除任何单元格。他们只是删除单元格的内容。在许多情况下,这正是您想要的,因为您不想破坏实际工作表的布局。如果您确实要删除单元格,则不会使用Replace方法。相反,您可以打开扩展的文本比较并使用Like运算符查看是否存在匹配项。
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
请注意,搜索词仍然从D1:D9范围中拉出,并且仍然会询问您要处理的范围。但是,从那里开始,过程有所不同:宏检查每个单元格,如果有部分匹配,则删除该单元格。
为了使该宏上的变体正常工作,您需要在过程本身之外包括“选项比较文本”行。
这指示VBA启用允许比较文本的关键字(例如Like)。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本提示(13373)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。