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

Вход

Регистрация

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

 

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

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

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
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4731
Репутация: 950 ±
Замечаний: 0% ±

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

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


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

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

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

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


Киви-кошелек: 9166309108
Яндекс-деньги: 410014131888288
 
Ответить
СообщениеПри удалении строк нужно отключать обновление монитора (это очень ускоряет).
Удалять строки нужно снизу вверх.

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

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
Группа: Проверенные
Ранг: Обитатель
Сообщений: 434
Репутация: -6 ±
Замечаний: 60% ±

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

Автор - ant6729
Дата добавления - 02.07.2017 в 16:17
KuklP Дата: Воскресенье, 02.07.2017, 16:25 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2346
Репутация: 481 ±
Замечаний: 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
Группа: Модераторы
Ранг: Местный житель
Сообщений: 12632
Репутация: 2779 ±
Замечаний: 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
Группа: Проверенные
Ранг: Обитатель
Сообщений: 434
Репутация: -6 ±
Замечаний: 60% ±

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

Автор - ant6729
Дата добавления - 02.07.2017 в 16:31
_Boroda_ Дата: Воскресенье, 02.07.2017, 18:54 | Сообщение № 9
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11904
Репутация: 4924 ±
Замечаний: 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 из 1
  • 1
Поиск:

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