1

我所拥有的是一列,我在其中使用了匹配函数来生成找到值的位置。所以该列中的每个单元格都会有一个位置值。前任。3, 4, 5, #N/A, 7, 8, etc. 保存一些带有“#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, etc.”

4

1 回答 1

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
于 2013-03-07T20:58:29.960 回答