删除行循环vba

时间:2015-03-04 17:06:24

标签: excel vba loops excel-vba for-loop

我在vba中有一个函数循环遍历一组数据并检查是否存在某些值,如果存在,则删除该行。它可以工作,但它不会删除所有值。我很确定这是因为循环的上限是范围的行数,每次删除都会变小。我该如何改变?任何帮助将不胜感激!

Function DeleteClients(rng1 As Range, rng2 As Range)

vData1 = rng1.Value

For i = 1 To rng2.Rows.Count

    For j = LBound(vData1, 1) To UBound(vData1, 1)

        If rng2.Cells(i, 1).Value = vData1(j, 1) Then
            rng2.Cells(i, 1).EntireRow.Delete
            Exit For
        End If

    Next j
Application.StatusBar = "Deleting out excluded clients... " & i & "/" & rng2.Rows.Count & " Records Processed " & Round((i / rng2.Rows.Count) * 100, 0) & " % Complete"
Next i

Application.StatusBar = False

End Function

1 个答案:

答案 0 :(得分:0)

Kyle是正确的 - 从底部(rng2.Rows.Count)循环到顶部(1),步骤-1,这应该可以正常工作。

你做的是当你删除第5行时,旧的第6行是新的第5行,但是下一个循环是第6行 - 旧的第7行,所以你的旧第6行(新的第5行)永远不会被考虑。从下到上循环解决了这个问题,因为如果删除第5行,则要考虑的下一行是第4行,并且它没有移动。