VBA如何删除不正确的离散线

时间:2016-07-27 12:07:45

标签: excel-vba vba excel

我试图删除一些第六个单元格不包含正确值的行。这是我的代码:

dim i As Integer
for i = 1 to Row
    If Worksheets("Data").Cells(i,6).Text <>"a" Then
        Worksheets("Data").Rows(i).Delete
    End If
Next i

我发现如果我删除第1行(aaa),那么前第2行(bbb)就变成第1行,也许它不是我要保留的行,但我已经变成了2,所以实际上我错过了这一行(bbb)并直接删除了前一行3(ccc)。

1 aaa => bbb
2 bbb => ccc
3 ccc

我不知道这个问题是否有一个好的算法?谢谢。

4 个答案:

答案 0 :(得分:3)

删除时始终从最后一个向后迭代。

dim i As Integer
for i = Row to 1 Step -1
    If Worksheets("Data").Cells(i,6).Text <>"a" Then
        Worksheets("Data").Rows(i).Delete
    End If
Next i

答案 1 :(得分:2)

让我们按相反的顺序进行。尝试根据您的意愿修改以下代码。

Sub Deleterows()
    Dim lRow As Long
    Dim iCntr As Long
    lRow = Sheets("Data").Range("A" & Rows.Count).End(xlUp).Row ' calculates no of rows used in A column

    For iCntr = lRow To 6 Step -1 ' loop in reverse order
        If Cells(iCntr, 1) = "str" Then 'You can change this text
            Sheets("Data").Rows(iCntr).Delete
        End If
    Next

    End Sub

答案 2 :(得分:2)

如果您要删除行,最好从下往上工作 将for i = 1 to Row更改为for i = Row to 1 Step -1

现在当你删除一行时,它不会改变它上面任何行的行号。

答案 3 :(得分:1)

我建议你使用while循环,以便在删除行之后减少迭代次数和循环次数,见下文

$('.language').click(function(){
    // Show if hidden and hide if visible
    $('.menu-langues', this).toggle();
});