Цитата |
---|
New написал: Чувствую надо Bedvit'a (Виталия) сюда подключать )P.S. А то у меня есть одна задачка, которая выполняется очень долго - удаление стоп-слов из общего списка... Общий список это 1 столбец со словами-фразами (273,000 строк), а список стоп-слов 1 столбец (2.000 строк). Макрос выполняется 3,5 минуты и меня это терзает... |
Вывод списка фраз (273 000 строк), где не встречаются стоп-слова (список 2000 слов) = 11,5 секунд. Выводится примерно 271000 строк.
Файл не могу приложить, написал генератор фраз и слов.
Выкладываю код - тест.
Код |
---|
Sub TestArrayFilterVStopWord() Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA") Dim i, j, t, arrRes Dim testSize1 As Long: testSize1 = 273000 'строки Dim arrV: ReDim arrV(1 To testSize1, 1 To 1) 'генерируем массив-исходник Cells.ClearContents For i = 1 To testSize1 arrV(i, 1) = CLng(Rnd * 273000) & "Test" Next Cells(1, 1).Resize(UBound(arrV, 1), UBound(arrV, 2)) = arrV 'генерируем массив условий в Excel, забираем в фильтр Dim arrParam: ReDim arrParam(1 To 2000, 1 To 6) For i = 1 To 2000 arrParam(i, 1) = 1: arrParam(i, 3) = 1: arrParam(i, 4) = 8 + 512: arrParam(i, 5) = (i + 270000) & "T" Next Cells(1, 3).Resize(UBound(arrParam, 1), UBound(arrParam, 2)) = arrParam 'выполняем фильтрацию по 2 тыс. условий t = Timer bVBA.ArrayFilterV arrV, arrParam, 0, arrRes 'фильтруем по первому столбцу массива (273000), НЕ содержит значения из списка(2000), выводим массив arrRes на лист(271000) Debug.Print Timer - t Cells(1, 10).Resize(UBound(arrRes, 1), UBound(arrRes, 2)) = arrRes End Sub |
«Бритва Оккама» или «Принцип Калашникова»?