Добрый день! После добавления пользовательской функции с данного сайта: https://www.planetaexcel.ru/techniques/7/205/ сильно тормозит Excel, можно ли что-то сделать, чтобы избавиться от "тормозов"?
Код
Function MergeIf(TextRange As Range, SearchRange As Range, Condition As String)
Dim Delimeter As String, i As Long
Delimeter = ", " 'символы-разделители (можно заменить на пробел или ; и т.д.)
'если диапазоны проверки и склеивания не равны друг другу - выходим с ошибкой
If SearchRange.Count <> TextRange.Count Then
MergeIf = CVErr(xlErrRef)
Exit Function
End If
'проходим по все ячейкам, проверяем условие и собираем текст в переменную OutText
For i = 1 To SearchRange.Cells.Count
If SearchRange.Cells(i) Like Condition Then OutText = OutText & TextRange.Cells(i) & Delimeter
Next i
'выводим результаты без последнего разделителя
MergeIf = Left(OutText, Len(OutText) - Len(Delimeter))
End Function
Если не спросить — никогда не узнаешь, если знаешь — нужно лишь спросить.
Выложите пример файла Excel, "похожий" на фрагмент реального. Далее, укажите реальные размены диапазона для поиска, количество вызовов функции, время выполнения.
1. У вас есть необъявленная переменная "OutText" 2. Не используйте свойства языка vba (тут: "TextRange") в качестве имен переменных 3. Измените текстовую переменную ("OutText"), которая создает конкатенацию, на переменную массива (конечно, вам нужно изменить код функции) Может такое изменение в чём-то поможет ... (?)
flower, используйте более шустрый аналог — СцепитьЕсли Если и с ним будет тупить, то пора пересчитывать в коде (по кнопке или событию) и выгружать на лист (оформить код в виде процедуры, а не функции листа)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄