VBA Пытается выполнить цикл по столбцу и удалить всю строку, если они содержат значение

#excel #vba

#excel #vba

Вопрос:

Я не очень хорош в циклах.

Я пытаюсь использовать VBA для перебора столбца в поисках любого значения, а затем удалить всю строку, если она ничего не находит (по сути, это способ удаления строк данных, которые я пометил (или не пометил в данном случае)).

Я пробовал разные вещи. Моя последняя попытка приведена ниже, но она просто удаляет каждую строку, независимо от того, имеет ли эта ячейка значение или нет. Есть предложения?

 Dim i as Long
For i = 1 To 50
If Cells(i, 1).Value = "" Then
    Selection.EntireRow.Delete
Else
    i = i   1
End If
Next i
End Sub
  

Комментарии:

1. Вы удаляете выбранную строку, а не ячейки (i, 1) строка

2. Вы должны выполнить итерацию в обратном направлении или использовать новый диапазон, который будет удален в конце сразу, созданный с помощью Union . Этот последний вариант будет самым быстрым. Но разница будет видна в очень большом диапазоне…

Ответ №1:

Здесь есть несколько проблем:

  1. При удалении строк в цикле работайте в обратном направлении, если продвигаться вперед, номер вашей строки изменяется при удалении.

  2. Нет необходимости увеличивать переменную «i» next i уже делает это

  3. Используйте объект Worksheet для удаления строки, а не выделения

Я бы переписал так:

 Sub delete()

Dim i As Long
For i = 50 To 1 Step -1
    If Cells(i, 1).Value = "" Then
        Worksheets("Sheet1").Rows(i).EntireRow.delete
    End If
Next i

End Sub
  

Комментарии:

1. Rows(i) было бы достаточно. Я имею в виду, вместо Rows(i amp; ":" amp; i)

2. Спасибо! Ваше объяснение имеет смысл. Я понял, что тоже ссылался не на тот столбец, но это работает отлично. Спасибо 🙂