Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Удаление строк не содержащих определённый текст в столбце S - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление строк не содержащих определённый текст в столбце S (Макросы/Sub)
Удаление строк не содержащих определённый текст в столбце S
Yar4i Дата: Суббота, 17.09.2016, 08:29 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 34
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день дамы и господа.
Удаление строк не содержащих определённый текст (или часть текста "ЯМ" и "РК") в столбце S.
[vba]
Код
Sub УдалитьНеСодержит()
Application.ScreenUpdating = False
    Application.Calculation = xlManual
    Dim iRow&, iArr As Variant
    iArr = Array("ЯМ", "РК")   'если текст ЯМ или РК, то удалить его
    With Application
         For iRow = Cells(Rows.Count, 19).End(xlUp).Row To 22 Step -1   'удалить при условии, что ЯМ и РК в 19 он же S столбце и удаляем с 22 строки
             If .Sum(.CountIf(Cells(iRow, 19), iArr)) = 0 Then Rows(iRow).Delete
         Next
    End With
    Application.Calculation = xlAutomatic
    Application.ScreenUpdating = True
End Sub
[/vba]
Есть похожие темы (с удалением строк содержащих определенный тест. Разница в "= 0" и "<0"), и я перепробовал все варианты. Все они оставляют строки не содержащие ЯМ и РК, т.е. пустые строки после 36 строки (см. вложение Лист1)
Но стоит мне добавить в S столбец 46-ой строки ЯМ или РК, как макрос удалит все строки после 36 строки, но только до 47 (её он оставит). См. вложение ЛИСТ2.
Как можно задать удаляемый диапазон в 500 или 1000 строк?
Где-то здесь надо что-то прописать [vba]
Код
For iRow = Cells(Rows.Count, 19).End(xlUp).Row To 22 Step -1
[/vba]
***
Понял, последний код - это поиск последней не пустой строки в столбце. Нужно через переменную For i = 500 to 22 step = -1
***
Я извиняюсь за беспокойство, нашел решение от _Boroda_
[vba]
Код
Range("S22:S500").AutoFilter
        Range("$S$22:$S$500").AutoFilter Field:=1, Criteria1:="<>ЯМ", Operator:=xlAnd, Criteria2:="<>РК"
        Range("S22:S500").SpecialCells(xlCellTypeVisible).EntireRow.Delete
        Selection.AutoFilter
[/vba]
Спасибо.
К сообщению приложен файл: ___.xlsx(15Kb)


Сообщение отредактировал Yar4i - Суббота, 17.09.2016, 08:56
 
Ответить
СообщениеДобрый день дамы и господа.
Удаление строк не содержащих определённый текст (или часть текста "ЯМ" и "РК") в столбце S.
[vba]
Код
Sub УдалитьНеСодержит()
Application.ScreenUpdating = False
    Application.Calculation = xlManual
    Dim iRow&, iArr As Variant
    iArr = Array("ЯМ", "РК")   'если текст ЯМ или РК, то удалить его
    With Application
         For iRow = Cells(Rows.Count, 19).End(xlUp).Row To 22 Step -1   'удалить при условии, что ЯМ и РК в 19 он же S столбце и удаляем с 22 строки
             If .Sum(.CountIf(Cells(iRow, 19), iArr)) = 0 Then Rows(iRow).Delete
         Next
    End With
    Application.Calculation = xlAutomatic
    Application.ScreenUpdating = True
End Sub
[/vba]
Есть похожие темы (с удалением строк содержащих определенный тест. Разница в "= 0" и "<0"), и я перепробовал все варианты. Все они оставляют строки не содержащие ЯМ и РК, т.е. пустые строки после 36 строки (см. вложение Лист1)
Но стоит мне добавить в S столбец 46-ой строки ЯМ или РК, как макрос удалит все строки после 36 строки, но только до 47 (её он оставит). См. вложение ЛИСТ2.
Как можно задать удаляемый диапазон в 500 или 1000 строк?
Где-то здесь надо что-то прописать [vba]
Код
For iRow = Cells(Rows.Count, 19).End(xlUp).Row To 22 Step -1
[/vba]
***
Понял, последний код - это поиск последней не пустой строки в столбце. Нужно через переменную For i = 500 to 22 step = -1
***
Я извиняюсь за беспокойство, нашел решение от _Boroda_
[vba]
Код
Range("S22:S500").AutoFilter
        Range("$S$22:$S$500").AutoFilter Field:=1, Criteria1:="<>ЯМ", Operator:=xlAnd, Criteria2:="<>РК"
        Range("S22:S500").SpecialCells(xlCellTypeVisible).EntireRow.Delete
        Selection.AutoFilter
[/vba]
Спасибо.

Автор - Yar4i
Дата добавления - 17.09.2016 в 08:29
Roman777 Дата: Суббота, 17.09.2016, 10:34 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 703
Репутация: 75 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Yar4i, Добрый день!
У Вас в строке [vba]
Код
For iRow = Cells(Rows.Count, 19).End(xlUp).Row To 22 Step -1
[/vba]
выражение [vba]
Код
Cells(Rows.Count, 19).End(xlUp).Row
[/vba]
ищет последнюю не скрытую заполненную строку в столбце 19 (а это "S"). Если вы хотите определять последнюю строку по другому столбцу, просто измените цифру 19 на соответствующую (порядковому номеру столбца). Хотите по столбцу "Т" - будет цифра 20.


Много чего не знаю!!!!
 
Ответить
СообщениеYar4i, Добрый день!
У Вас в строке [vba]
Код
For iRow = Cells(Rows.Count, 19).End(xlUp).Row To 22 Step -1
[/vba]
выражение [vba]
Код
Cells(Rows.Count, 19).End(xlUp).Row
[/vba]
ищет последнюю не скрытую заполненную строку в столбце 19 (а это "S"). Если вы хотите определять последнюю строку по другому столбцу, просто измените цифру 19 на соответствующую (порядковому номеру столбца). Хотите по столбцу "Т" - будет цифра 20.

Автор - Roman777
Дата добавления - 17.09.2016 в 10:34
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление строк не содержащих определённый текст в столбце S (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!