vba删除行无法正常工作

时间:2017-07-10 07:51:11

标签: excel excel-vba vba

我一直在尝试使用某个VBA修改工作表中的数据,遗憾的是我使用的以下代码无法正常工作。 基本上列A有文本,如果列A是" Pit"我想删除整行。 (不包含" Pit",但仅限#34; Pit")。由于某种原因,代码只删除了一些行而不是其他行,所以我必须继续运行脚本几次以摆脱所有的" Pit" s。它删除的行与不删除的行之间没有明显的不同,它们都是文本和文本。空间不足。有数千行具有不同的A列文本。这是代码,我非常感谢任何建议。

Sub Pitdelete()

Dim lastrow As Long
Dim datasheet As Worksheet
Dim i As Long

Set datasheet = Worksheets("DefCatCou")

lastrow = datasheet.Range("a" & datasheet.Rows.Count).End(xlUp).Row

For i = 2 To lastrow
If datasheet.Cells(i, 1) = "Pit" Then
datasheet.Rows(i & ":" & i).EntireRow.delete
End If

Next i

End Sub

谢谢!

3 个答案:

答案 0 :(得分:0)

每次删除行时,它下面的所有行都会向上移动。

您可以声明另一个这样的变量,并在每次删除行时增加它:

Dim c as Integer
c = 0
If datasheet.Cells(i, 1) = "Pit" Then
datasheet.Rows(i - c & ":" & i - c).EntireRow.delete
c = c + 1
...

答案 1 :(得分:0)

删除行时只需向后循环:

Sub Pitdelete()

Dim lastrow As Long
Dim datasheet As Worksheet
Dim i As Long

Set datasheet = Worksheets("DefCatCou")

lastrow = datasheet.Range("a" & datasheet.Rows.Count).End(xlUp).Row

For i = lastrow To 2 step -1 'This should fix it.
    If datasheet.Cells(i, 1) = "Pit" Then
        datasheet.Rows(i & ":" & i).EntireRow.delete
    End If
Next i
End Sub

原因是当你删除一行并用{1}增加i时,你基本上会跳过下一行,因为删除了那一行。

另一种方法是在i = i - 1行之后添加EntireRow.Delete

答案 2 :(得分:0)

@zipa是对的 - 当你删除一行时,其他人会向上移动,改变他们的索引。作为他的提议的替代方案,您可以让循环反向运行:

For i = lastrow To 2 Step -1
    If datasheet.Cells(i, 1) = "Pit" Then
        datasheet.Rows(i & ":" & i).EntireRow.delete
    End If
next i

这样,如果删除一行,它就不会影响循环中的下一个索引。