Я создаю быструю субстанцию для проверки достоверности сообщений электронной почты. Я хочу удалить целые строки контактных данных, которые не содержат «@» в столбце «E». Я использовал макрос ниже, но он работает слишком медленно, потому что Excel перемещает все строки после удаления.Эффективный способ удалить целую строку, если ячейка не содержит '@'
Я пробовал другую технику следующим образом: set rng = union(rng,c.EntireRow)
, а затем удалял весь диапазон, но я не мог предотвратить сообщения об ошибках.
Я также экспериментировал только с добавлением каждой строки в выделение и после того, как все было выбрано (как в ctrl + select), впоследствии удалив его, но я не смог найти соответствующий синтаксис для этого.
Любые идеи?
Sub Deleteit()
Application.ScreenUpdating = False
Dim pos As Integer
Dim c As Range
For Each c In Range("E:E")
pos = InStr(c.Value, "@")
If pos = 0 Then
c.EntireRow.Delete
End If
Next
Application.ScreenUpdating = True
End Sub
Во-первых, ограничить количество клеток, чтобы пройти. т.е. вместо 'range (E: E)', используйте диапазон с данными в нем – shahkalpesh
Я всегда задавался вопросом, как это сделать - как выбрать диапазон, который включает первую ячейку, пока последняя ячейка с данными в ней ? – Parseltongue
http://www.rondebruin.nl/win/s4/win001.htm - Взгляните на это. Я уверен, он ответит вам за вас. Повторите свой вопрос, скажите, что вы находитесь в ячейке A1, содержащей данные, теперь нажмите ctrl + стрелка вниз. Это выберет все ячейки, начиная с A1 до последней ячейки, содержащей данные (Примечание: в середине не должно быть пустых ячеек). Используя VBA, вы можете 'lastCell = Range (« A1 »). End (xlDown)' – shahkalpesh