vba在循环播放的时候从集合中移除

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

我的目标是用这些缺less的集合值生成一个集合。 例如,根据上面的例子,我的集合将具有值“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语句上的下Run-time error '9': Subscript out of range错误。 我猜这是因为我在循环中删除而索引不断重新sorting。 那么为什么问题是如何在循环中实现这些清除,或者如果有更好的方法来实现我所尝试的。

请注意,这些比赛结果不是完美的升序或降序。 所以它实际上看起来更像“5,8,4,3,7,#N / A等”。

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

 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