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。