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

时间:2013-07-12 01:10:37

标签: excel vba excel-vba excel-2010 excel-2007

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

我感谢任何建议。非常感谢提前!

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

7 个答案:

答案 0 :(得分:69)

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

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

答案 1 :(得分:17)

好的我知道这对于VBA,但如果您需要为一次性批量删除执行此操作,您可以使用以下Excel功能:http://blog.contextures.com/archives/2010/06/21/fast-way-to-find-and-delete-excel-rows/希望这有助于任何人

查找字符串的示例" paper":

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

答案 2 :(得分: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:输入当前文件所包含的行数。

     

号码" 5"在"如果"是第五栏(E)

答案 3 :(得分:5)

我想加入@ MBK的答案。虽然我发现@ MBK的答案在解决类似问题方面非常有帮助,但如果@MBK包含如何过滤特定列的屏幕截图,那就更好了。enter image description here

答案 4 :(得分: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月7日以使UsedRange正确或将偏移更改为2行,而不是.Offset(1,0)中的1。

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

答案 5 :(得分: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

答案 6 :(得分:-1)

  1. 删除第1行和第2行,使标题位于第1行
  2. 将其放在宏中(它将通过行75000进行检查,如果您愿意的话,可以降低数字

    Columns("E:E").Select Selection.AutoFilter ActiveSheet.Range("$E$1:$E$75000").AutoFilter Field:=1, Criteria1:="none" Range("E2:E75000").SpecialCells(xlCellTypeVisible).Select Selection.EntireRow.Delete ActiveSheet.Cells.EntireRow.Hidden = False ActiveSheet.Range("$E$1:$E$75000").AutoFilter Field:=1 Columns("E:E").Select Selection.AutoFilter Range("E2").Select Range("A1").Select