Как любитель встроенных инструментов провел тест с расширенным фильтром
1. стандартный, для этого пришлось правда развернуть таблицу с критериями, так как нужно условие AND
Данные Данные Данные
<>*спб* <>*бесплатно* <>*бумаг* ....
Результат почти в 2 раза хуже чем в следующем варианте (789,1132813 по таймеру)
2. С использованием формулы для критеия так как массивные там нужно использовать или через симуляцию или через имена, то избрана быстрая
=COUNT(INDEX(FIND(LOWER('Стоп-слова'!A$2:A$2098);LOWER(A2));))=0и результат по таймеру 296,8828125
Код |
---|
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
t = Timer
Range("Таблица1[[#All],[Данные]]").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("d1:d2"), CopyToRange:=Range("K1"), Unique _
:=False
DoEvents
Debug.Print Timer - t
Range("f1") = Timer - t
t = Timer
' Range("Таблица1[[#All],[Данные]]").AdvancedFilter Action:=xlFilterCopy, _
' CriteriaRange:=Worksheets("Стоп-слова").Range("d1:d2098"), CopyToRange:=Range("L1"), Unique _
' :=False
Range("Таблица1[[#All],[Данные]]").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Worksheets("Стоп-слова").Range("F1:CBV2"), CopyToRange:=Range("M1"), Unique _
:=False
DoEvents
Debug.Print Timer - t
Range("G1") = Timer - t
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True |
предварительной подготовкой критериев и удаления её после думаю можно пренебречь.
выведено в обоих вариантах 229892 значений, произвел обратную проверку, стоп слов в результате не выявлено.