Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как в excel удалить нужную строку через VBA

88K
06 марта 2013 года
Vanderlog
4 / / 06.03.2013
Добрый день.
Подскажите пожалуйста, задача следующая:
Необходимо пройтись по всем рядам таблицы.
Если в колонке А стоит "-" и в колонке В стоит "-", то данную строку необходимо удалить.
Можно ли реализовать данную задачу через макросы?
Спасибо.
37K
06 марта 2013 года
freets
97 / / 15.10.2010
Конечно можно. Ставишь на запись макрос, выполняешь какие нужно действия(удаление строки), останавливаешь запись. Открываешь Макросы->Изменить и смотришь какой код получился.
Будет примерно так:

 
Код:
Rows("1:1").Select              //выделяем первую строку
Selection.Delete Shift:=xlUp    //удаляем со сдвигом вверх
только добавь нужное условие и всё.
88K
06 марта 2013 года
Vanderlog
4 / / 06.03.2013
А как правильно организовать перебор всех элементов, и, собственно, если не трудно то условие скажите как задать?
37K
06 марта 2013 года
freets
97 / / 15.10.2010
 
Код:
Sub Macros()
Dim rw As Long
For rw = 1 To 100
    If Cells(rw, "A").Value = "-" And Cells(rw, "B").Value = "-" Then
        Rows(rw & ":" & rw).Delete Shift:=xlUp
    End If
Next rw
End Sub
88K
06 марта 2013 года
Vanderlog
4 / / 06.03.2013
Работает, но почему-то за один проход не справляется. Причем строк меньше 100. 10 строк удаляет за 4 прохода. Что может останавливать скрипт?
275
06 марта 2013 года
pashulka
985 / / 19.09.2004
Вообще-то, при удалении строки необходимо уменьшать счётчик, ибо в противном случае могут остаться строки, содержащие "-" (разумеется, если "-" содержатся в смежных ячейках) или начать удаление снизу вверх, т.е.

 
Код:
Private Sub Test()
   
    Application.ScreenUpdating = False
    Dim rw&
    For rw = 100 To 1 Step -1
        If Cells(rw, 1) = "-" And Cells(rw, 2) = "-" Then Rows(rw).Delete
    Next
    Application.ScreenUpdating = True
   
End Sub
88K
06 марта 2013 года
Vanderlog
4 / / 06.03.2013
Все верно, при переборе снизу вверх работает корректно. Спасибо всем!
275
22 марта 2013 года
pashulka
985 / / 19.09.2004
Чуть не забыл :) если в дальнейшем потребуется проверять наличие "-" в большем количестве столбцов, чем сейчас, то вместо увеличения And или дополнительного цикла по столбцам, можно программно воспользоваться стандартной функцией рабочего листа =СЧЁТЕСЛИ() (см. листинг)

Код:
Private Sub Test2()
   
    Dim rw&, ws As Worksheet
    Set ws = ActiveSheet
   
    With Application
         .ScreenUpdating = False
         For rw = 100 To 1 Step -1
             If .CountIf(ws.Cells(rw, "A").Resize(, 2), "-") = 2 Then ws.Rows(rw).Delete
         Next
         .ScreenUpdating = True
    End With
   
End Sub
P.S. Разумеется номер последней заполненной строки мы можем определять программно.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог