Страницы: 1
RSS
Массово удалить ячейки, содержащие определенные наборы символов
 
Добрый день. Стоит такая задача - есть большое количество данных, в одном столбце содержатся слова. Нужно удалить из этого столбца список слов.
Например, был столбец а б в г д е ё ж з. Нужно удалить г д з. Как это сделать? Большое спасибо тому, кто ответит.  
 
Можно в доп.столбец ввести формулу:
=ПОДСТАВИТЬ(А1;"г д з";"")
Потом получившиеся данные скопировать и вставить как значения на место исходного столбца (если надо заменить исходные)
Или еще проще: Ctrl+H в строке что найти "г д з", в строке на что заменить - пусто (ничего не вводить)


З.Ы. По-моему, я опять чего-то не так понял...
С примером, все-таки, гораздо легче понимать, чего надо в итоге...
Изменено: Пытливый - 13.03.2015 16:49:25
Кому решение нужно - тот пример и рисует.
 
Хорошо, скину пример)
На 1-м листе часть таблицы, на втором - те слова, которые не нужны.
Нужно сделать так, чтобы на 1-м листе не было строк, которые содержат слова из списка
 
В свободном столбце формула
Код
=COUNTIF(Лист2!A:A,B1)
фильтр/сортировка, удаление.
Это ответ на  "как сделать".
 
Расширенный фильтр с условием формулой
Изменено: Казанский - 13.03.2015 17:13:02
 
Не понял, что конкретно нужно делать..
 
В первую ячейку любого свободного столбца пишите указанную формулу, протягиваете её вниз сколько нужно, сортируете весь диапазон по этому столбцу, удаляете ненужную группу строк, удаляете ненужные больше формулы.
Можно отсортировать как было, если заранее проставить порядковые номера строк.
Или можно нужное отобрать фильтром по столбцу с формулой.

А как делать расширенным фильтром - я тоже не повторю :)
 
Решение макросом. Обязательное условие - не менять структуру файла (ну или макрос править под новую).
При необходимости можете добавлять в список критериев на удаление  новые позиции (без пропущеных строк)
 
с расширенным фильтром у меня получилось (чуть видоизменив формулу Казанского) - ну и растянув её на весь столбец
Код
=ЕЧИСЛО(ПОИСКПОЗ(B2;Лист2!$A$1:$A$10;0))
потом можете (выделив отфильтрованное) сделать ALT+Ж - (выделит только отфильтрованное) -> удалить строки (выделенные) -> снять фильтр...
p.s. вроде бы получается (никогда не умела им пользоваться - спасибо!)
Изменено: JeyCi - 13.03.2015 22:27:23
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Всем большое спасибо! Самым удобным и простым для меня оказалось решение Vitallic, отдельное спасибо вам!
 
Макросом конечно проще - жми только кнопку. Пока что-то не изменится. Или например в основном списке не появится дублирование названий...
 
Странно, вроде бы на выходных читал коментарий Hugo, о некоторых недоделках моего макроса (к стати замечание по делу было), а уже сегодня
ни комментария ни изменений в существующих . . . Ладно,
вот еще один макрос (подсмотренный и адаптированный), который должен удалять ВСЕ строки с определенными символами в определенном столбце
Код
Sub test2()
Dim rFnd As Range, rDel As Range, sAddr As String, iNum As Integer
Dim col As New Collection
Application.ScreenUpdating = False: On Error Resume Next
With Sheets(2)
For iNum = 1 To .[a1].CurrentRegion.Count
col.Add .Cells(iNum, 1), CStr(.Cells(iNum, 1))
Next
End With
If Len(col.Item(1)) = 0 Then MsgBox "Нет условий для удаления строк": Exit Sub
For iNum = 1 To col.Count
With Sheets(1).Range("B:B")
Set rFnd = .Find(What:=col(iNum), Lookat:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=True)
If Not rFnd Is Nothing Then
Set rDel = rFnd
sAddr = rFnd.Address
Set rFnd = .FindNext(After:=rFnd)
Do Until rFnd.Address = sAddr
Set rDel = Union(rDel, rFnd)
Set rFnd = .FindNext(After:=rFnd)
Loop
End If
End With
If Not rDel Is Nothing Then rDel.EntireRow.Delete
Next
Application.ScreenUpdating = True
End Sub
П.С. единственное замечание условия должны идти без пустых строк(если их несколько) и начинаться с ячейки А1
 
Страницы: 1
Наверх