我一直在尝试使用某个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
谢谢!
答案 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
这样,如果删除一行,它就不会影响循环中的下一个索引。