2

配列 Ar() のいずれかの値と同等でないセル値を持つすべての行を削除しようとしています。論理演算子 NOT を配置すると、何らかの理由でループが無限になります (Excel がフリーズします)。反対に、配列から値を含む行を削除したい場合に備えて、問題なく動作します。

問題はオンラインです:

If Not .Cells(i, 10).Value = Ar(j) Then

私のコード:

Sub Tims()
    Dim LastRow As Long, LR As Long
    Dim i As Long, j As Long
    Dim t As Integer
    Dim Ar() As String

    Worksheets("Start").Activate
    t = Count("a", Range("A3:A14"))
    LR = Range("I3:I10").End(xlDown).Row
    Worksheets("Master").Activate
    Sheets("Master").Range("A100:A" & 100 + LR - 3).Value = Sheets("start").Range("I3:I" & LR).Value

    With Worksheets("Master")
        For j = 1 To LR - 2
            ReDim Preserve Ar(j)
            Ar(j) = Cells(99 + j, 1)
        Next j
    End With

    With Worksheets("Master")
        LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
    End With

    Worksheets("Master").Activate

    For j = 1 To LR - 2
        For i = 1 To LastRow
            With Worksheets("Master")
                If Not .Cells(i, 10).Value = Ar(j) Then
                    .Cells(i, 10).EntireRow.Delete
                    i = i - 1
                End If
            End With
        Next i
    Next j

End Sub
4

1 に答える 1

3

無限ループの原因となっている行は次のとおりです。

i = i - 1

それを取り除き、これを交換してください

For i = 1 To LastRow

これとともに

For i = LastRow To 1 Step -1

i = i - 1行が削除されるたびに行をスキップしないようにするために、なぜあなたが試したのかわかりました。しかし、それは機能しません。行が削除されると、テーブルの下部にある空の行に置き換えられ、最終的にそれに到達します。この空の行には明らかに配列の値が含まれていないAr(j)ため、削除されて別の空の行に置き換えられ、その後、削除されて別の空の行に無限に置き換えられます。

デバッグ モードでコードをステップ実行していれば、これを自分で理解できたはずです。

代わりに、を使用して下から上に繰り返しStep -1ます。

于 2014-04-25T07:33:40.800 に答える