должен удалить первый символ ячейки, если нет # 3Созданный цикл никогда не заканчивается

В общем, мне нужно удалить все записи, которые нев поле первичного ключа в качестве второй цифры должно быть 3, которое, например, может выглядеть так:

#39001

Или без № 3

Я хочу, чтобы все ячейки, у которых не # 3 начало, их строки были удалены. Я придумал следующий код: он удаляет все, но макрос никогда не останавливается.

 Sub keep3()
    '
    ' RemoveNum Macro
    Dim i As Integer
    i = 2
    While i < 14000
        If InStr(Cells(i, 2), "3") = 2 Then
            ' Do nothing
            i = i + 1
        Else
            Rows(i).EntireRow.Delete
            ' Note - not incrementing i here
        End If
    Wend
    End Sub

Есть идеи?

Спасибо

 Mjall214 мая 2013 г., 22:28
хорошо, как мне обойти
 NickSlash14 мая 2013 г., 22:59
Если в ваших данных есть пустые строки, вы можете добавить еще одну проверку в другом случае, чтобы увеличить пустые строки. Если вы нене иметь пустых строк, вы можете изменить условие while, чтобыNot Cells(i,2) = "" который остановит любые лишние ненужные итерации.
 user113245714 мая 2013 г., 22:27
В какой-то момент выВероятно, заканчиваются строки с данными. Пустые строки после этого будут непрерывно удаляться и никогда не увеличивать i.

Ответы на вопрос(1)

Попробуйте это вместо:

Sub keep3()

    Dim i As Integer

    For i = 14000 To 2 Step -1
        If Mid(Cells(i, 2), 2, 1) = "3" Then
            Rows(i).EntireRow.Delete
        End If
    Next

End Sub

Обратите внимание, что цикл движется в обратном направлении - это потому, что когда вы удаляете строку, строка ниже подтягивается, поэтому ваш цикл может делать странные вещи, если вы идете вперед и затем удаляете строку, поскольку вы можете пропустить следующую Возможно, вы также хотели удалить. Кроме того, я изменил оператор IF, так как вы сказали, что хотите удалить строки, где 2-й символ - 3.

 Mjall214 мая 2013 г., 22:30
Переместить или добавить, прежде чем wend, а '
 steveo4014 мая 2013 г., 22:47
Вы изменили ответ, см. выше

Ваш ответ на вопрос