Excel vba for循环 Sub-letr() 作为整数的Dim i 对于i=3到25 如果单元格(i,7)“CA”,则 第(i)行。删除 如果结束 接下来我 端接头

Excel vba for循环 Sub-letr() 作为整数的Dim i 对于i=3到25 如果单元格(i,7)“CA”,则 第(i)行。删除 如果结束 接下来我 端接头,excel,vba,Excel,Vba,上述代码不会删除所有结果(共4个)。我必须运行两次代码才能删除所有4个结果。有人能告诉我我做错了什么吗?正如其他人所说,你需要从数据的底部到顶部, 如果您只对第3行到第25行感兴趣,请尝试: Sub letr() Dim i As Integer For i = 3 To 25 If Cells(i, 7) <> "CA" Then Rows(i).Delete End If Next i End Sub 这是可能的,随着索引的增加,有一个Whil

上述代码不会删除所有结果(共4个)。我必须运行两次代码才能删除所有4个结果。有人能告诉我我做错了什么吗?

正如其他人所说,你需要从数据的底部到顶部, 如果您只对第3行到第25行感兴趣,请尝试:

Sub letr()

Dim i As Integer

For i = 3 To 25

    If Cells(i, 7) <> "CA" Then
    Rows(i).Delete
    End If

Next i

End Sub

这是可能的,随着索引的增加,有一个While循环

Dim I As Integer, N As Integer
I = 3
N = 25
While I <= N
    If Cells(I, 7) <> "CA" Then
        Rows(I).Delete
        N = N - 1
    Else
        I = I + 1
    End If
Wend
如果不删除行,只需增加索引即可测试下一行

删除行时,不要在下一行移动到当前行时前进。相反,将边界减少1

For i = 25 To 3 Step -1
Dim I为整数,N为整数
I=3
N=25

While I如果您仍然希望自上而下,并且您知道起始行和结束行,则可以使用While循环

Dim I As Integer, N As Integer
I = 3
N = 25
While I <= N
    If Cells(I, 7) <> "CA" Then
        Rows(I).Delete
        N = N - 1
    Else
        I = I + 1
    End If
Wend
Dim i作为整数:i=3
尺寸c为整数:c=1
c<(25-3+2)时执行
如果单元格(i,7)中的值为“CA”,则
第(i)行。删除
其他的
i=i+1
如果结束
c=c+1
环
或者使用for循环

Dim i As Integer: i = 3
Dim c As Integer: c = 1

Do While c < (25 - 3 + 2)
    If Cells(i, 7).Value <> "CA" Then
        Rows(i).Delete
    Else
        i = i + 1
    End If
    c = c + 1
Loop
用于c=3到25
如果单元格(i,7)中的值为“CA”,则
第(i)行。删除
其他的
i=i+1
如果结束
下一个c

这是一个反复出现的问题。从bottum up运行deletation,或者您只是不迭代所有行。要查看这种情况,请使用
F8逐步浏览代码,然后查看每一步的结果。同样,最好不要一个接一个地删除,而是在使用了
Union
之后立即删除。这是一个例子。让我知道这是否回答了你的问题,这样我们就可以关闭这个线程。如果你从上到下删除,你实际上是在向上移动行,而你的迭代器i仍然在向前移动。这意味着如果您有3:ny4:ny5:CA,那么在i=3时,第一个NY将被删除。现在您还有3:ny4:CA,但迭代器已经升级,i=4。由于删除了第3行,在本例中,新的第3行仍然保留值NY,但循环已继续检查第4.3行。使用这种方法,用
For
循环代替
Do-While
实际上更简单,因为索引
c
总是增加。@Jean-ClaudeArbaut yep,使用For循环迭代c在语法上也会更干净。我将添加到我的ans。Thx!