我所拥有的是一个列,我使用匹配函数来生成找到的值的位置。因此该列中的每个单元格都有一个位置值。恩。 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等”。
答案 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