excel - 一旦条件在列中匹配,删除excel表中的行

标签 excel vba editor rows

我的数据看起来像这样。

enter image description here

我想删除名为 Position 的列中的值从 first 值为 1 的行。我写了一个宏来做这样的事情

Sub DEL_row()
row_number = 2

Do
DoEvents

row_number = row_number + 1
Position_from_first = Sheet8.Range("E" & row_number)

If InStr(Position_from_first, "1") >= 1 Then

Sheet8.Rows(row_number & ":" & row_number).Delete

End If

Loop Until Position_from_first = ""

MsgBox "completed"

End Sub

但是当我运行它时,我得到一个错误。消息框显示已完成,但当我浏览 excel 表时它没有完成所需的工作。
谁能帮我解决问题。

非常感谢您的帮助...

最佳答案

虽然您的概念是正确的,但您的语法和对 VBA 的理解存在一些错误。我在下面列出了它们。

  • 此代码中根本不需要 Do 事件。
  • 删除行时,您需要从最后一行开始并退回到循环的开头,因为一旦您删除一行,它就会影响该行下面的所有行引用,因此如果您继续前进,您的循环计数将丢失行.
  • 您还需要使用 .EntireRow.Delete . .Delete只会删除单元格内容。

  • 我已在下面修复了您的代码以反射(reflect)这些问题。我还提供了一个更简单的替代方案来解决您使用 AutoFilter 方法的问题。
    Sub DEL_row()
    'get last used row in column E
    row_number = Sheet8.Range("E" & Sheet8.Rows.Count).End(xlup).Row
    
    For x = row_number to 2 Step -1
    
         Position_from_first = Sheet8.Range("E" & row_number)
    
         If InStr(Position_from_first, "1") >= 1 Then
         'If Sheet8.Range("E" & row_number) = 1 ' this will also work
    
              Sheet8.Rows(row_number & ":" & row_number).EntireRow.Delete
    
         End If
    
    Next
    
    MsgBox "completed"
    
    End Sub
    

    如果您使用 AutoFilter,您可以完全避免循环(并节省时间),如下所示:
    Sub DEL_row()
    
    With Sheet8
    
       'get last used row in column E
        row_number = .Range("E" & .Rows.Count).End(xlup).Row
    
        With .Range("E1:E" & row_number)
    
             .AutoFilter 1, "1"
             .Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    
        End With
    
        .AutoFilterMode = False
    
    End With
    
    Msgbox "completed"
    
    End Sub
    

    关于excel - 一旦条件在列中匹配,删除excel表中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33856269/

    相关文章:

    excel - NamedRange 引用另一个命名范围

    vba - 将撤消构建到 Excel VBA 宏中

    html - Visual Studio 2017 html 标签选择器

    editor - 如何更改Sublime Text 2选择的标签颜色

    java - 如何使用 IContentAssist 处理器在自动完成中显示弹出的附加信息

    excel - 将 'findnext' 函数合并到现有的 'find' 代码中?

    vba - 如何在 VBA 中使用方括号进行字符串计算?

    excel - 纯Excel : How do I reference a column wit a dynamic number?

    excel - 获取对象的所有属性的列表

    VBA 类 - 如何让一个类拥有额外的类