vba在循环中从集合中删除

时间:2013-03-07 20:55:04

标签: excel excel-vba vba

我所拥有的是一个列,我使用匹配函数来生成找到的值的位置。因此该列中的每个单元格都有一个位置值。恩。 3,4,5,#N / A,7,8等。保存一些值为“#N / A”的单元格。

我的目标是使用这些缺少的集合值生成一个集合。例如,基于上面的示例,我的集合将具有值“6”。我当前的方法是填充具有所有可能位置的集合,然后循环遍历列并根据列单元格的值删除。

Dim arrPos As New Collection
Dim bottomRow, matchRow As Long
bottomRow = Range("A" & Rows.Count).End(xlUp).Row
matchRow = Range("C" & Rows.Count).End(xlUp).Row

' fill collection
For i = 3 To bottomRow
arrPos.Add i
Next i

' remove selects
For h = 3 To matchRow
    For g = 1 To arrPos.Count
    If Range("C" & h).Value = arrPos(g) Then
    arrPos.Remove (g)
    End If
    Next g
Next h

我的问题是,我似乎在循环时基于索引删除了。我在Run-time error '9': Subscript out of range语句中出现If错误。我猜这是因为我在循环中删除并且索引不断重新排序。那么为什么问题是如何在循环中实现这些删除,或者是否有更好的方法来实现我正在尝试的东西。

请注意,这些匹配结果不是完全按升序或降序排列。所以它实际上看起来更像“5,8,4,3,7,#N / A等”。

1 个答案:

答案 0 :(得分:1)

你应该从最后一个位置开始,倒数:

For h = matchRow To 3 Step -1
    For g = arrPos.Count To 1 Step -1
        If Range("C" & h).Value = arrPos(g) Then
            arrPos.Remove (g)
        End If
    Next g
Next h