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