Есть задача, которая, как я понимаю, решается функцией "если". История такая: есть несколько тысяч текстовых строк, но некоторые из них нужно удалить, если определенная ячейка этой строки имеет точное совпадение с ячейкой на другом листе. Например, прайс по разным товарам - если слово "мясная колбаса черкизовская" точно совпадает со списком слов, по которым производится поиск (не затрагивая позицию просто "мясная колбаса") - вся строка удаляется.
Я не знаю, необходим ли здесь файл, поэтому если что, извините.
Коллеги и мастера Excel,
Есть задача, которая, как я понимаю, решается функцией "если". История такая: есть несколько тысяч текстовых строк, но некоторые из них нужно удалить, если определенная ячейка этой строки имеет точное совпадение с ячейкой на другом листе. Например, прайс по разным товарам - если слово "мясная колбаса черкизовская" точно совпадает со списком слов, по которым производится поиск (не затрагивая позицию просто "мясная колбаса") - вся строка удаляется.
Я не знаю, необходим ли здесь файл, поэтому если что, извините.Caryaga
Формулы не умеют удалять строки. Поэтому или формулой, а потом фильтр и удалять руками (столбец В в файле), или макрос (кнопка в файле). Макрос заодно удаляет еще и дубликаты в исходном тексте [vba]
Код
Sub tt() With Sheets("для удаления") r00_ = 1 r01_ = .Range("A" & .Rows.Count).End(3).Row If r01_ <= r00_ Then Exit Sub n0_ = r01_ - r00_ + 1 ar0 = .Range("A" & r00_).Resize(n0_) End With r10_ = 1 r11_ = Range("A" & Rows.Count).End(3).Row If r11_ <= r10_ Then Exit Sub n1_ = r11_ - r10_ + 1 ar1 = Range("A" & r10_).Resize(n1_) Set slov = CreateObject("Scripting.Dictionary") With slov For i = 1 To n0_ aaa = .Item(ar0(i, 1)) Next n0_ = .Count For j = 1 To n1_ aaa = .Item(ar1(j, 1)) Next n_ = .Count Application.ScreenUpdating = 0 Application.Calculation = xlCalculationManual Range("A" & r10_).Resize(n1_).ClearContents Range("A" & r10_).Resize(n_) = Application.Transpose(.Keys) 'У Transpose ограничение на длину текста - 255 символов и кол-во элементов - 65536 записей Range("A" & r10_).Resize(n0_).Delete Shift:=xlUp End With Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = 1 End Sub
[/vba]
Формулы не умеют удалять строки. Поэтому или формулой, а потом фильтр и удалять руками (столбец В в файле), или макрос (кнопка в файле). Макрос заодно удаляет еще и дубликаты в исходном тексте [vba]
Код
Sub tt() With Sheets("для удаления") r00_ = 1 r01_ = .Range("A" & .Rows.Count).End(3).Row If r01_ <= r00_ Then Exit Sub n0_ = r01_ - r00_ + 1 ar0 = .Range("A" & r00_).Resize(n0_) End With r10_ = 1 r11_ = Range("A" & Rows.Count).End(3).Row If r11_ <= r10_ Then Exit Sub n1_ = r11_ - r10_ + 1 ar1 = Range("A" & r10_).Resize(n1_) Set slov = CreateObject("Scripting.Dictionary") With slov For i = 1 To n0_ aaa = .Item(ar0(i, 1)) Next n0_ = .Count For j = 1 To n1_ aaa = .Item(ar1(j, 1)) Next n_ = .Count Application.ScreenUpdating = 0 Application.Calculation = xlCalculationManual Range("A" & r10_).Resize(n1_).ClearContents Range("A" & r10_).Resize(n_) = Application.Transpose(.Keys) 'У Transpose ограничение на длину текста - 255 символов и кол-во элементов - 65536 записей Range("A" & r10_).Resize(n0_).Delete Shift:=xlUp End With Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = 1 End Sub
_Boroda_, простите, не увидел Ваш отредактированный пост) удалите, пожалуйста, мой ответ. сейчас протестирую и попробую разобраться в функциях. Огромное Вам спасибо!
_Boroda_, простите, не увидел Ваш отредактированный пост) удалите, пожалуйста, мой ответ. сейчас протестирую и попробую разобраться в функциях. Огромное Вам спасибо!Caryaga
_Boroda_, такой вопрос - работает ли формула не при точном совпадении слов? например, если в случае искомого текста будет "мясная колбаса рецепт", а в качестве просматриваемого массива слово "рецепт". Найдет ли она совпадение? у меня не получилось так
_Boroda_, такой вопрос - работает ли формула не при точном совпадении слов? например, если в случае искомого текста будет "мясная колбаса рецепт", а в качестве просматриваемого массива слово "рецепт". Найдет ли она совпадение? у меня не получилось такCaryaga
_Boroda_, да, я понимаю, что это немного другая задача. привыкаю к жесткой логике экселя) просто решил модифицировать формулу и снова потерпел неудачу.
_Boroda_, да, я понимаю, что это немного другая задача. привыкаю к жесткой логике экселя) просто решил модифицировать формулу и снова потерпел неудачу.Caryaga