Бесконечно для ... следующего цикла: как это исправить?
Я пытаюсь удалить все строки со значениями ячеек, не эквивалентными одному из значений из массива Ar(). Когда я ставлю логический оператор не цикл идет бесконечно по какой-то причине (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
1 ответ:
Линия, вызывающая бесконечный цикл, такова:
i = i - 1
Избавьтесь от него и замените это
For i = 1 To LastRow
С этим
For i = LastRow To 1 Step -1
Я понимаю, почему вы пытались
i = i - 1
, чтобы избежать пропуска строки каждый раз, когда строка удаляется. Но это не работает: если строка удаляется, то она заменяется пустой строкой в нижней части таблицы, и в конечном итоге вы достигаете ее. Эта пустая строка, очевидно, не содержит ни одного из значений в вашем массивеAr(j)
, поэтому она удаляется и заменяется на еще одна пустая строка, которая затем удаляется и заменяется другой пустой строкой, ad infinitum.Вы могли бы понять это сами, если бы прошли через свой код в режиме отладки.
Вместо этого просто повторите снизу вверх, используя
Step -1
.