Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как удалить строку, если ячейка содержит опред. текст. / 14 сообщений из 14, страница 1 из 1
03.04.2008, 07:10:33
    #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
03.04.2008, 08:31:30
    #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
27.04.2008, 13:33:42
    #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
27.04.2008, 15:26:15
    #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
27.04.2008, 15:30:15
    #35282200
ДмиДми
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить строку, если ячейка содержит опред. текст.
Вместо
"по какой причине уважаемый trevojnui выбрал"
читать
"по какой причине уважаемый(ая) Anytka выбрал(а)"
etc.
...
Рейтинг: 0 / 0
27.04.2008, 15:45:43
    #35282211
ДмиДми
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить строку, если ячейка содержит опред. текст.
1. Пожалуй, точнее будет
Код: plaintext
Const PATT = "ООО[ ""]?*" 'Must be in uppercase
"ооопс!" не пройдет, как и неологизм "ооошка" :)
Можно изощриться и добавить туда еще левые (открывающие) кавычки - "ёлочки", "лапки" etc.

2. Кроме того, из заглавного поста (мягко говоря) не вполне ясно, следует ли "ооошки" удалять или, наоборот, оставлять.
...
Рейтинг: 0 / 0
27.04.2008, 16:37:40
    #35282248
trevojnui
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить строку, если ячейка содержит опред. текст.
Спасибо! все, разобрался :)
...
Рейтинг: 0 / 0
27.04.2008, 17:44:29
    #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
27.04.2008, 17:46:36
    #35282290
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить строку, если ячейка содержит опред. текст.
Пардон "OOO" в переменной ptrn стоят в лат. коде, т.ч. их надо поменять на русск.

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

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


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