删除特定列中具有特定值的行

时间:2011-07-29 13:10:04

标签: vba excel-vba excel

Sub main()
   Dim count As Integer
   Dim i As Integer
   count = Range("Q" & Rows.count).End(xlUp).Row
   MsgBox count
   For i = 2 To count
      If Cells(i, "Q").Value = 2 Then
           Sheets(1).Rows(i).EntireRow.Delete
      End If
  Next i
End Sub

为什么代码不能正常工作?当我在excel中执行上面的VBA代码时,它会删除一些行,然后退出并显示以下消息:

run time error 13 

这是什么意思?有时我收到这条消息:

type mismatch

在上面的VBA代码中,我想删除Q列值为2但行不通的行。你能告诉我这个bug的位置吗?

让我告诉你发生了什么。代码正在运行,但它正在删除一些行并因运行时错误13而中止。当我打开我的EXCEL文件以查看Q列时,我观察到的是Q列的某些行有#REF!

我认为这可能是原因,但我该如何克服它?如何让我的代码正常工作?我有一个Q列,其中包含1,2个值。必须删除其中包含2列的Q列,我的意思是整行。

2 个答案:

答案 0 :(得分:2)

如果第10行== 2,则删除第10行;在循环的下一次迭代中,您检查第11行,它现在具有行#12的值,因为它在删除后向上移动,这意味着您跳过查看已删除行下的任何行。

你可能想要倒退;

Sub main()
   Dim count As Integer
   Dim i As Integer
   '//assuming all filled rows from Q2 downwards?
   count = Range("Q2").End(xlDown).Row

   For i = count To 2 Step -1
      If Cells(i, "Q").Value = 2 Then
           Sheets(1).Rows(i).EntireRow.Delete
      End If
  Next i
End Sub

答案 1 :(得分:1)

在大型工作表中循环遍历每一行可能非常耗时。尝试使用find方法。也请关闭screenupdating。

Sub HTH()
    Dim rCell As Range
    Dim strAddress As String

    Application.ScreenUpdating = False

    With ActiveSheet.Columns("Q")
        Set rCell = .Find(What:=2, LookIn:=xlValues, SearchOrder:=xlByColumns)

        If Not rCell Is Nothing Then
            Do
                strAddress = rCell.Address
                rCell.EntireRow.Delete
                Set rCell = .FindNext(Range(strAddress))
            Loop Until rCell Is Nothing
        End If

    End With

    Application.ScreenUpdating = True

End Sub