Здраствуйте, друзья! Имеется длинная таблица(Т1) с одним столбиком, в каждой строчке - одно слово. Имеется еще одна табличка(Т2) также с одним столбиком, в каждой строке по 3-4 слова. Необходимо из таблицы Т1 взять каждое слово и проверить наличие в таблице Т2. Если слово обнаружится, нужно удалить все строки, содержащие данное слово. Это в элементарном виде. И еще вариант посложнее (это то, что хотелось бы видеть в идеале, но необязательно, главное - хоть какое-то решение) Есть процедура в VBA, которая ищет все слова и удаляет. Но в ней нужно вставлять вручную каждое слово. Было бы круто, чтобы она автоматизированно всё проверила. Код привожу ниже:
[vba]
Код
Function ПоискСтрокПоУсловию(ByVal ТекстДляПоиска As String, Optional HideOnly As Boolean) As Long ' функция получает в качестве параметра ТекстДляПоиска (можно использовать символы * и ?) ' Если HideOnly = TRUE, то строки, содержащие в ячейках ТекстДляПоиска, скрываются, ' иначе (HideOnly = FALSE - по умолчанию) - удаляются ' Функция возвращает количество удалённых строк Dim ra As Range, delra As Range Application.ScreenUpdating = False ' отключаем обновление экрана
' перебираем все строки в используемом диапазоне листа For Each ra In ActiveSheet.UsedRange.Rows ' если в строке найден искомый текст If Not ra.Find(ТекстДляПоиска, , xlValues, xlPart) Is Nothing Then ' добавляем строку в диапазон для удаления If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra) End If Next On Error Resume Next: ПоискСтрокПоУсловию = delra.Areas.Count ' количество найденных строк
If Not delra Is Nothing Then ' если подходящие строки найдены - скрываем или удаляем их If HideOnly Then delra.EntireRow.Hidden = True Else delra.EntireRow.Delete End If End Function
Sub Запуск() UserForm1.Show End Sub
[/vba]
[moder]Код нужно в специальные теги обрамлять - кнопка #. Поправил Вам.
Здраствуйте, друзья! Имеется длинная таблица(Т1) с одним столбиком, в каждой строчке - одно слово. Имеется еще одна табличка(Т2) также с одним столбиком, в каждой строке по 3-4 слова. Необходимо из таблицы Т1 взять каждое слово и проверить наличие в таблице Т2. Если слово обнаружится, нужно удалить все строки, содержащие данное слово. Это в элементарном виде. И еще вариант посложнее (это то, что хотелось бы видеть в идеале, но необязательно, главное - хоть какое-то решение) Есть процедура в VBA, которая ищет все слова и удаляет. Но в ней нужно вставлять вручную каждое слово. Было бы круто, чтобы она автоматизированно всё проверила. Код привожу ниже:
[vba]
Код
Function ПоискСтрокПоУсловию(ByVal ТекстДляПоиска As String, Optional HideOnly As Boolean) As Long ' функция получает в качестве параметра ТекстДляПоиска (можно использовать символы * и ?) ' Если HideOnly = TRUE, то строки, содержащие в ячейках ТекстДляПоиска, скрываются, ' иначе (HideOnly = FALSE - по умолчанию) - удаляются ' Функция возвращает количество удалённых строк Dim ra As Range, delra As Range Application.ScreenUpdating = False ' отключаем обновление экрана
' перебираем все строки в используемом диапазоне листа For Each ra In ActiveSheet.UsedRange.Rows ' если в строке найден искомый текст If Not ra.Find(ТекстДляПоиска, , xlValues, xlPart) Is Nothing Then ' добавляем строку в диапазон для удаления If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra) End If Next On Error Resume Next: ПоискСтрокПоУсловию = delra.Areas.Count ' количество найденных строк
If Not delra Is Nothing Then ' если подходящие строки найдены - скрываем или удаляем их If HideOnly Then delra.EntireRow.Hidden = True Else delra.EntireRow.Delete End If End Function
Sub Запуск() UserForm1.Show End Sub
[/vba]
[moder]Код нужно в специальные теги обрамлять - кнопка #. Поправил Вам.Kamilio
Сообщение отредактировал _Boroda_ - Четверг, 25.02.2016, 00:32