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

Вход

Регистрация

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

 

= Мир MS Excel/Удалить строки, не содержащие значение - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удалить строки, не содержащие значение (Макросы/Sub)
Удалить строки, не содержащие значение
ant6729 Дата: Воскресенье, 02.07.2017, 15:28 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 322
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Добрый день!, подскажите, пожалуйста, как оптимизировать или переписать код.
Требуется НЕ удалять строки, содержащие определенное значение. А остальные удалять.
Код работает, но медленно и нужно запускать несколько раз
Причем может удалить и нужные строки.
Удаляет слово оставить, но не удаляет ОСТАВИТЬ, как это объяснить?)

[vba]
Код
Sub DeleteRows()
    Dim c As Range
    Dim SrchRng
    lr = Cells(Rows.Count, 1).End(xlUp).Row
    Set c = Range("A1:A3000").Find("Оставить", LookIn:=xlValues)
    For i = 1 To lr
    If Not Cells(i, 1).Value Like c Then Rows(i).Delete (xlShiftUp)
    Next i
End Sub
[/vba]


Сообщение отредактировал ant6729 - Воскресенье, 02.07.2017, 15:29
 
Ответить
СообщениеДобрый день!, подскажите, пожалуйста, как оптимизировать или переписать код.
Требуется НЕ удалять строки, содержащие определенное значение. А остальные удалять.
Код работает, но медленно и нужно запускать несколько раз
Причем может удалить и нужные строки.
Удаляет слово оставить, но не удаляет ОСТАВИТЬ, как это объяснить?)

[vba]
Код
Sub DeleteRows()
    Dim c As Range
    Dim SrchRng
    lr = Cells(Rows.Count, 1).End(xlUp).Row
    Set c = Range("A1:A3000").Find("Оставить", LookIn:=xlValues)
    For i = 1 To lr
    If Not Cells(i, 1).Value Like c Then Rows(i).Delete (xlShiftUp)
    Next i
End Sub
[/vba]

Автор - ant6729
Дата добавления - 02.07.2017 в 15:28
RAN Дата: Воскресенье, 02.07.2017, 15:31 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4532
Репутация: 920 ±
Замечаний: 0% ±

2010
как это объяснить?

почитать справку Find, и добавить недостающий параметр
А еще проще - ввести название темы в строку поиска. Нормальных решений море.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
как это объяснить?

почитать справку Find, и добавить недостающий параметр
А еще проще - ввести название темы в строку поиска. Нормальных решений море.

Автор - RAN
Дата добавления - 02.07.2017 в 15:31
Karataev Дата: Воскресенье, 02.07.2017, 15:34 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 883
Репутация: 331 ±
Замечаний: 0% ±

Excel
При удалении строк нужно отключать обновление монитора (это очень ускоряет).
Удалять строки нужно снизу вверх.


 
Ответить
СообщениеПри удалении строк нужно отключать обновление монитора (это очень ускоряет).
Удалять строки нужно снизу вверх.

Автор - Karataev
Дата добавления - 02.07.2017 в 15:34
ant6729 Дата: Воскресенье, 02.07.2017, 16:13 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 322
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Нормальных решений море.

Похожих много, да.

Karataev, нет, не это нужно, меня на форуме научили...) я сам могу...
[vba]
Код
Sub deldrozd_r()
For x = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Not Cells(x, 4).Value Like "Оставить" Then Rows(x).Delete (xlShiftUp)
Next x
End Sub
[/vba]

Мне нужно, чтобы если,например, "Оставить меня", "оставить это", "оставить и прочие сочетания String в значении ячейки, то строка НЕ удалялась. А остальные строчки, не содержащие слово оставить в тексте ячейки (текст может быть на несколько слов) удалялись.
 
Ответить
Сообщение
Нормальных решений море.

Похожих много, да.

Karataev, нет, не это нужно, меня на форуме научили...) я сам могу...
[vba]
Код
Sub deldrozd_r()
For x = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Not Cells(x, 4).Value Like "Оставить" Then Rows(x).Delete (xlShiftUp)
Next x
End Sub
[/vba]

Мне нужно, чтобы если,например, "Оставить меня", "оставить это", "оставить и прочие сочетания String в значении ячейки, то строка НЕ удалялась. А остальные строчки, не содержащие слово оставить в тексте ячейки (текст может быть на несколько слов) удалялись.

Автор - ant6729
Дата добавления - 02.07.2017 в 16:13
ant6729 Дата: Воскресенье, 02.07.2017, 16:17 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 322
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Могу, ошибаться, но, вроде, где - то есть символ, заменяющий все остальные знаки
 
Ответить
СообщениеМогу, ошибаться, но, вроде, где - то есть символ, заменяющий все остальные знаки

Автор - ant6729
Дата добавления - 02.07.2017 в 16:17
KuklP Дата: Воскресенье, 02.07.2017, 16:25 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2293
Репутация: 474 ±
Замечаний: 0% ±

2003-2010
Неужто трудно справку прочесть? Про Option Compare в частности и подстановочные знаки.
[vba]
Код
If Not Cells(x, 4).Value Like "*Оставить*" Then Rows(x).Delete
[/vba]Параметр сдвига не нужен.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеНеужто трудно справку прочесть? Про Option Compare в частности и подстановочные знаки.
[vba]
Код
If Not Cells(x, 4).Value Like "*Оставить*" Then Rows(x).Delete
[/vba]Параметр сдвига не нужен.

Автор - KuklP
Дата добавления - 02.07.2017 в 16:25
Pelena Дата: Воскресенье, 02.07.2017, 16:30 | Сообщение № 7
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11467
Репутация: 2546 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
Мне показалось, что речь идёт о разном регистре.
Попробуйте перевести всё в один регистр
Например, так
[vba]
Код
If Not LCase(Cells(x, 4).Value) Like "*оставить*" Then Rows(x).Delete (xlShiftUp)
[/vba]


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеМне показалось, что речь идёт о разном регистре.
Попробуйте перевести всё в один регистр
Например, так
[vba]
Код
If Not LCase(Cells(x, 4).Value) Like "*оставить*" Then Rows(x).Delete (xlShiftUp)
[/vba]

Автор - Pelena
Дата добавления - 02.07.2017 в 16:30
ant6729 Дата: Воскресенье, 02.07.2017, 16:31 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 322
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Всем спасибо, это я, видимо, запутался под конец работы... Всем спасибо.
 
Ответить
СообщениеВсем спасибо, это я, видимо, запутался под конец работы... Всем спасибо.

Автор - ant6729
Дата добавления - 02.07.2017 в 16:31
_Boroda_ Дата: Воскресенье, 02.07.2017, 18:54 | Сообщение № 9
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11269
Репутация: 4656 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Еще вариант
[vba]
Код
If Not InStr(Cells(x, 4), "оставить") Then Rows(x).Delete
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЕще вариант
[vba]
Код
If Not InStr(Cells(x, 4), "оставить") Then Rows(x).Delete
[/vba]

Автор - _Boroda_
Дата добавления - 02.07.2017 в 18:54
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удалить строки, не содержащие значение (Макросы/Sub)
Страница 1 из 11
Поиск:

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