Вы не предоставили никакой информации о том, как развертывается UDF, но держу пари, что это как минимум половина проблемы.
Держу пари, что вы воссоздаете эту сцепленную строку для каждого дубликата встолбец А. Кроме того, я считаю, что весьма вероятно, что вы используете полные ссылки на столбцы.
Я собираюсь предположить, что ваши данные начинаются со строки 2.
Экстентчисла в столбце B:
b2:index(b:b, match(1e99, b:b))
Степень дублирования идентификаторов в столбце A:
a2:index(a:a, match(1e99, b:b))
Если вы уже связали результат для идентификатора в столбце A, то оннамного быстрее получить этот результат сверху, чем построить его заново.Кроме того, если вы смотрите выше текущей строки, чтобы увидеть, был ли результат уже обработан и не был обработан, то нет смысла включать эти строки в текущую сборку конкатенации.
В использовании C2эту формулу и заполните до значений в столбцах A и B.
=iferror(index(c$1:C1, match(a2, a$1:a1, 0)), MYVLOOKUP(a2, a$1:index(b:b, match(1e99, b:b)), 2))
Если ваши данные действительно начинаются в строке 1, используйте эту формулу в C1.
=MYVLOOKUP(a2, a$1:index(b:b, match(1e99, b:b)), 2)
Пример:
Рассмотрим приведенную выше формулу в C10.Он ищет совпадение с A10 в A1: A9;если он найден, он возвращает ранее сцепленную строку из связанной строки в столбце C. Если он не найден, он создает новую объединенную строку, но только из идентификаторов, начинающихся в строке 10, из столбца A и значений, начинающихся со строки 10 в столбце B внизна строку, содержащую последнее число в столбце B.