powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как удалить строку, если ячейка содержит опред. текст.
14 сообщений из 14, страница 1 из 1
Как удалить строку, если ячейка содержит опред. текст.
    #35231568
Anytka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть столбец, который содержит названия фирм и пустые ячейки.
Как удалить строку, ячейка которой содержит текст "ООО" (далее идет название), т.е. оставить все ОООшки, остальные удалить??? Пока что удаляю только конкретные названия. Так же надо удалить строки, если ячейка пуста.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Set progr = book_TNS.Worksheets("Sheet1").Range("a2:x2").Find(What:="Предприятие", LookIn:=xlValues) 'идет поиск столбца "Заказчик"

x = progr.Rows.Count 'номер последней строки
y = progr.Column '№ столбца

For i = x To  2  Step - 1 
    If book_TNS.Worksheets("Sheet1").Cells(i, y) = "" Then book_TNS.Worksheets("Sheet1").Rows(i).Delete Shift:=xlUp
    If book_TNS.Worksheets("Sheet1").Cells(i, y) = "ООО МММ" Then book_TNS.Worksheets("Sheet1").Rows(i).Delete Shift:=xlUp
Next i
...
Рейтинг: 0 / 0
Как удалить строку, если ячейка содержит опред. текст.
    #35231635
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
If book_TNS.Worksheets("Sheet1").Cells(i, y) Like "ООО*" Then book_TNS.Worksheets("Sheet1").Rows(i).Delete Shift:=xlUp
I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Как удалить строку, если ячейка содержит опред. текст.
    #35282113
trevojnui
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скажите пожалуйста, что такое "book_TNS"? А "Worksheets("Sheet1")" - это тоже самое что и "book_TNS.Worksheets("Лист1")"? Если я знаю в какой колонке искать, немогу ли написать вот так?
Set progr = book_TNS.Worksheets("Лист1").Range("a2:a2").Find(What:="Автомобиль*", LookIn:=xlValues)
?

Цикл "For i = x To 2 Step -1" начинается с последней записи?
...
Рейтинг: 0 / 0
Как удалить строку, если ячейка содержит опред. текст.
    #35282197
Фотография ДмиДми
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trevojnui"Worksheets("Sheet1")" - это тоже самое что и "book_TNS.Worksheets("Лист1")"? Если book_TNS есть кодовое имя активной книги (ActiveWorkbook.CodeName), то почти что да.
"Почти" - потому, что имя листа (не кодовое, а то, что обозначено на ярлычке листа) в одном случае Sheet1, а в другом Лист1, - а это совсем-совсем разные имена.
По какой причине уважаемый trevojnui выбрал именно такой способ адресации, он не сказал, но ему виднее.

trevojnuiЕсли я знаю в какой колонке искать, немогу ли написать вот так?
Set progr = book_TNS.Worksheets("Лист1").Range("a2:a2").Find(What:="Автомобиль*", LookIn:=xlValues)? Написать так (да ещё и не так) можно. А вот получить желаемый результат, как я его понимаю, - нет. Это поиск в одной-единственной ячейке, A2.
Не говоря уже о том, что у вас и кодовое имя книги наверняка другое, и имя листа тоже.
Как обычно, поставив курсор на Find и нажав F1, можно узнать много интересного. В частности, по поводу "Автомобиль * ": To find cells that match more complicated patterns...

trevojnuiЦикл "For i = x To 2 Step -1" начинается с последней записи? Да. После удаления нижние строки подтягиваются вверх, и если идти сверху вниз, то при организации цикла при помощи оператора For будет пропущена без рассмотрения строка, сразу следующая за удалённой и потому занявшая её место.

* * *

Исходный код мог бы удалить только строки с "ООО МММ".
Но он не удалит ничего - просто потому, что в нём всегда будет x = 2, а там не "ООО МММ".
Я бы предложил
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
    Const HRDS_ADDR = "a2:x2"
    Const HDR = "Предприятие"
    Const PATT = "ООО[ ""]*" 'Must be in uppercase
    
    Dim progr As Range, i As Long, x As Long, y As Long, v
    Dim Ws As Worksheet

    Set Ws = book_TNS.Worksheets("Sheet1")
    
    'поиск столбца "Заказчик"
    Set progr = Ws.Range(HRDS_ADDR).Find(What:=HDR, LookIn:=xlValues _
        , LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
    
    x = Ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row 'номер последней строки
    y = progr.Column '№ столбца

    For i = x To progr.Row +  1  Step - 1 
        v = Ws.Cells(i, y)
        If IsEmpty(v) Or UCase(v) Like PATT Then Ws.Rows(i).Delete
    Next i
...
Рейтинг: 0 / 0
Как удалить строку, если ячейка содержит опред. текст.
    #35282200
Фотография ДмиДми
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо
"по какой причине уважаемый trevojnui выбрал"
читать
"по какой причине уважаемый(ая) Anytka выбрал(а)"
etc.
...
Рейтинг: 0 / 0
Как удалить строку, если ячейка содержит опред. текст.
    #35282211
Фотография ДмиДми
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Пожалуй, точнее будет
Код: plaintext
Const PATT = "ООО[ ""]?*" 'Must be in uppercase
"ооопс!" не пройдет, как и неологизм "ооошка" :)
Можно изощриться и добавить туда еще левые (открывающие) кавычки - "ёлочки", "лапки" etc.

2. Кроме того, из заглавного поста (мягко говоря) не вполне ясно, следует ли "ооошки" удалять или, наоборот, оставлять.
...
Рейтинг: 0 / 0
Как удалить строку, если ячейка содержит опред. текст.
    #35282248
trevojnui
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! все, разобрался :)
...
Рейтинг: 0 / 0
Как удалить строку, если ячейка содержит опред. текст.
    #35282285
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если все же критерии поиска - не такие сложные, и можно обойтись без regular expresions или квази- regular expresions (оператор Like), то перебор в сочетании с Find и SpecialCells(xlCellTypeBlanks) будет значительно экономичнее представленных выше:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Option Explicit

Sub test()
    Dim rng As Range        'Search range
    Dim rngMatch As Range   'All matches
    Dim cnt As Long         'Counter
    Dim ptrn As String      'Match pattern
    Dim i As Long
    
    Set rng = [A1:A100]
    ptrn = "OOO *"
    
    Application.ScreenUpdating = False
    On Error Resume Next
    
    'Delete empty rows if not more than 8,192 non-contiguous areas
    rng.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    
    'Number of matches
    cnt = Application.CountIf(rng, ptrn)
    
    'Check for matches
    If cnt =  0  Then Exit Sub
    
    'Find the first match
    Set rngMatch = rng.Find(ptrn, rng( 1 ), xlValues, xlWhole)
    
    'Get all matches together
    For i =  1  To cnt -  1 
        Set rngMatch = Union(rngMatch, rng.Find(ptrn, rngMatch(i), xlValues, xlWhole))
    Next i
    
    'Delete rows with matches
    rngMatch.EntireRow.Delete
End Sub

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Как удалить строку, если ячейка содержит опред. текст.
    #35282290
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон "OOO" в переменной ptrn стоят в лат. коде, т.ч. их надо поменять на русск.

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Как удалить строку, если ячейка содержит опред. текст.
    #35679204
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал один интересный тест и решил выложить его тут, т.к. этот топик более-менее соответствует поставленной задаче. А поставленная задача - типичная для экселя: есть столбец с условием (в моём случае это простейшее условие в столбце "В"). Стоит задача собрать вместе (сжать) строки, для которых условие выполняется. Признаться, полученными результатами сам был немного удивлён :-) Не думал, что получится обогнать SpecialCells()
И так, смотрим вложение... (2 части)
...
Рейтинг: 0 / 0
Как удалить строку, если ячейка содержит опред. текст.
    #35679208
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Part 2
...
Рейтинг: 0 / 0
Как удалить строку, если ячейка содержит опред. текст.
    #35679731
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опять я нахимичил в самый последний момент - все 4 кнопки сбились в одно место :-) Перейдите в режим конструктора и расставьте кнопки на свои места :-)
...
Рейтинг: 0 / 0
Как удалить строку, если ячейка содержит опред. текст.
    #35682650
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм, похоже, что с вышеприведённым файлом проблемы не только с расположением кнопок. Для избежания "торможения" при открытии пришлось заменить формулы значениями, а заодно дополнил файл ещё несколькими вариантами.
И так, ещё раз опишу задачу. Допустим, есть некая довольно большая таблица (в моём случае она состоит из одного столбца - Столбец1). Задача - выбрать из таблицы строки, соответствующие какому-либо условию по одному (нескольким) полям таблицы - т.е. типичная задача выборки (выше был пример с поиском "ООО"). Задача - осуществить поиск требуемых строк максимально быстро.

Рассматривается 8 вариантов как это можно сделать :-).
Первое место по скорости занимает вариант с исп. пользовательской функции Сцеп().
Второе - вариант с исп. ПОИСКПОЗ(). А вот третье место - вопрос спорный :-) Если после открытия файла не запускать вариант 7 (с исп. ПОИСКПОЗ()) и флажок "Заменять значениями" будет установлен, то 3е место займёт вариант 6 (на основе автофильтра). Если же хоть раз запустить вар.7, то вар. 6 будет заметно медленнее выполняться (по крайней мере у меня так). Почему так - не знаю :-) А если снять галочку "Заменять значениями" и запустить хоть один формульный вариант, то автофильтр оказывается далеко сзади :-).
Самый же простой вариант на основе НАИМЕНЬШИЙ() оказывается самым медленным вариантом. Функцию НАИМЕНЬШИЙ() нецелесообразно использовать, когда параметр " k " (порядок наименьшего) представляет собой массив значительного размера.
...
Рейтинг: 0 / 0
Как удалить строку, если ячейка содержит опред. текст.
    #35682653
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Part 2
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как удалить строку, если ячейка содержит опред. текст.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]