1

私が持っているのは、見つかった値の位置を生成するために一致関数を使用した列です。したがって、その列の各セルには位置の値があります。元。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など」のようになります。

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 に答える