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

Excel 如果单元格包含字符串X,则删除整行,excel,vba,excel-2010,excel-2007,Excel,Vba,Excel 2010,Excel 2007,我是VBA新手,我正试图想出一种方法来删除网站列单元格中包含单词none的所有行(并将单元格向上移动,如果可能的话)。该表包含5000多条记录,这将为我节省大量时间 我感谢你的建议。非常感谢 试试这个 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

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

我感谢你的建议。非常感谢

试试这个

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

在另一篇评论中提到了这一点,但你可以试试这样的东西

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
我还没有测试过它,它来自内存,所以它可能需要一些调整,但它应该在不循环数千行的情况下完成工作。您需要删除Jul 11以便
UsedRange
正确,或者将
中的偏移量(1,0)
更改为2行,而不是1行


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

这不一定是VBA任务-使用自动筛选最容易解决此特定任务

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

4.清除筛选器

好的,我知道这是用于VBA的,但是如果需要一次性批量删除,可以使用以下Excel功能:希望这对任何人都有帮助

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

  • 在“查找和替换”对话框中,在“查找内容”框中键入“纸张”
  • 单击“全部查找”,查看带有“纸张”的单元格列表
  • 选择列表中的一个项目,然后按Ctrl+A,选择整个列表,并选择工作表上的所有“纸张”单元格
  • 在功能区的“常用”选项卡上,单击“删除”,然后单击“删除图纸行”
  • 在“开发人员选项卡”中,转到“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)列


    我想补充@MBK的答案。虽然我发现@MBK的答案对解决类似问题非常有帮助,但如果@MBK包含如何过滤特定列的屏幕截图,那就更好了

  • 删除第1行和第2行,使标题位于第1行
  • 将其放入宏中(它将检查第75000行,如果您愿意,可以降低该数字)

    列(“E:E”)。选择
    自动筛选
    ActiveSheet.Range($E$1:$E$75000”)。自动筛选字段:=1,标准1:=“无”
    范围(“E2:E75000”)。特殊单元格(xlCellTypeVisible)。选择
    Selection.EntireRow.Delete
    ActiveSheet.Cells.EntireRow.Hidden=False
    ActiveSheet.Range(“$E$1:$E$75000”)。自动筛选字段:=1
    列(“E:E”)。选择
    自动筛选
    范围(“E2”)。选择
    范围(“A1”)。选择


  • 对于5000+条记录,最好是过滤和删除,而不是循环。@matzone,您不应该使用这种循环来删除进程。如果您确实想删除某些类型的所有元素,请始终使用
    for i=5000到4步骤-1
    。有一个答案几乎正是您所要寻找的。您只需要修改criteria用于自动筛选。太棒了!这是我能找到的批量执行此操作的唯一方法(不使用VBA)。这是应该被接受的答案。当您有50000多行时,使用筛选器是不可行的。易建联:这是一个仅限windows的解决方案,不幸的是在OSX Excel中不起作用。除非OP特别询问如何通过VBA执行此操作。