如果单元格包含字符串X,则删除整行

问题描述 投票:34回答:6

我是VBA的新手,我正试图想出一种方法来删除所有行(如果可能的话,移动单元格),其中网站列单元格包含单词none。该表包含5000多条记录,这将为我节省大量时间。

我很感激任何建议。提前谢谢了!

http://i39.tinypic.com/5ano1d.png

excel vba excel-vba excel-2010 excel-2007
6个回答
69
投票

这不是VBA任务 - 使用自动过滤器最简单地解决此特定任务。

1.插入自动过滤器(在Excel 2010中单击主页 - >(编辑)排序和过滤 - >过滤器) 2.过滤“网站”列 3.标记'无'并删除它们 4.清除过滤器


17
投票

好的我知道这对于VBA但是如果你需要这样做一次性批量删除你可以使用以下Excel功能:http://blog.contextures.com/archives/2010/06/21/fast-way-to-find-and-delete-excel-rows/希望这可以帮助任何人

寻找字符串“paper”的示例:

  1. 在“查找和替换”对话框中,在“查找内容”框中键入“纸张”。
  2. 单击全部查找,以查看带有“纸张”的单元格列表
  3. 在列表中选择一个项目,然后按Ctrl + A,选择整个列表,并选择工作表上的所有“纸张”单元格。
  4. 在功能区的“主页”选项卡上,单击“删除”,然后单击“删除工作表行”。

8
投票

在“开发人员选项卡”中,转到“Visual Basic”并创建一个模块。复制粘贴以下内容。请记住根据您的需要更改代码。然后运行该模块。

  Sub sbDelete_Rows_IF_Cell_Contains_String_Text_Value()
    Dim lRow As Long
    Dim iCntr As Long
    lRow = 390
    For iCntr = lRow To 1 Step -1
        If Cells(iCntr, 5).Value = "none" Then
            Rows(iCntr).Delete
        End If
    Next
    End Sub

lRow:输入当前文件所包含的行数。

“If”中的数字“5”表示第五(E)列


5
投票

我想补充一下@MBK的回答。虽然我发现@ MBK的答案在解决类似问题时非常有用,但如果@MBK包含如何过滤特定列的屏幕截图会更好.enter image description here


1
投票

这是在另一个评论中提到的,但你可以尝试这样的事情。

Sub FilterAndDelete()

Application.DisplayAlerts = False 

     With Sheet1 'Change this to your sheet name

         .AutoFilterMode = False   
         .Range("A3:K3").AutoFilter
         .Range("A3:K3").AutoFilter Field:=5, Criteria1:="none"
         .UsedRange.Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Delete 

     End With

Application.DisplayAlerts = True

End Sub

我没有测试过它,它来自内存,所以它可能需要一些调整,但它应该完成工作而不需要循环数千行。您需要删除11-Jul以使UsedRange正确或将偏移更改为2行而不是.Offset(1,0)中的1。

一般来说,在我做.Delete之前,我将使用.Select而不是删除方式运行宏,这样我可以确保删除正确的范围,这可能值得检查以确保删除适当的范围。


0
投票

试试这个 ...

Dim r as Range
Dim x as Integer

For x = 5000 to 4 step -1 '---> or change as you want //Thanx 4 KazJaw

  set r = range("E" & format(x))
  if ucase(r.Value) = "NONE" then
    Rows(x).EntireRow.Delete
  end if 

Next
© www.soinside.com 2019 - 2024. All rights reserved.