我正在尝试删除A列的ID字段中没有“ AB”或“ ON”的整个行。我已经写了下面的代码,但它删除了所有行。 谁能帮我这个忙。 我已附上数据的屏幕截图,谢谢! 数据截图链接

Sub DeleteRows()

FinalRow = Cells(Rows.Count, "A").End(xlUp).Row

i = 2

Do While i <= FinalRow

    If Cells(i, "A") <> "PQ*" OR If Cells(i, "A") <> "ON*" Then

        Cells(i, 1).EntireRow.Delete

        FinalRow = FinalRow - 1

    Else

        i = i + 1

    End If

Loop

End Sub

===============>>#1 票数:2 已采纳

根据我的评论:

Sub DeleteRows()

FinalRow = Cells(Rows.Count, "A").End(xlUp).Row

i = 2

Do While i <= FinalRow

    If Left(Cells(i, "A"), 2) = "PQ" Or Left(Cells(i, "A"), 2) = "ON" Then

        i = i + 1

    Else

        Cells(i, 1).EntireRow.Delete

        FinalRow = FinalRow - 1


    End If

Loop

End Sub

===============>>#2 票数:1

  • 删除行时,最好从下往上
  • 通配符不能与相等运算符一起使用; 您应该使用Like运算符。
  • 你的逻辑有点偏离。 您需要将“ OR ”括在括号中

如果您使用的是我在原始帖子中所了解的通配符,则它会转换为 PQ或ON 开头的单元格

所以:

Option Explicit
Sub DeleteRows()
    Dim FinalRow As Long
    Dim I As Long

FinalRow = Cells(Rows.Count, "A").End(xlUp).Row

For I = FinalRow To 2 Step -1
    If Not (Cells(I, "A") Like "PQ*" Or _
        Cells(I, "A") Like "AB*") Then _
        Cells(I, 1).EntireRow.Delete
Next I

End Sub

===============>>#3 票数:0

这是一个与您正在执行的操作更相似的选项。

编辑:如果ID是前两个字母,则应该可以使用。

Sub Deleterows()

FinalRow = Cells(Rows.count, "A").End(xlUp).row

i = 2

Do While i <= FinalRow

If Not Left(Cells(i, "A"), 2) = "PQ" And Not Left(Cells(i, "A"), 2) = "ON" Then

    Cells(i, 1).EntireRow.Delete

    FinalRow = FinalRow - 1

Else

    i = i + 1

End If

Loop

End Sub

  ask by n.ai translate from so

未解决问题?本站智能推荐: