Сценарий:
Итак, сегодня на работе мой компьютер запустил обновление MS Office.Затем, примерно через 30 минут, кто-то подошел ко мне с простой просьбой: вместо использования VLOOKUP
для возврата только первого совпадения 1005 * они хотели получить список с разделителями all совпадений.(например, «какие офисы посетил этот пользователь на этой неделе»?) Выглядело достаточно просто.
Итак, работая с некоторыми нежелательными данными (см. ниже), я быстро написал следующую короткую демонстрационную строку:
=TEXTJOIN(", ", TRUE, IFERROR(INDEX(B$1:B$11, AGGREGATE(15, 6, ROW(A$1:A$11)/--(A$1:A$11=E1), ROW(A$1:A$11))),""))
Нажмите Введите и ... 6
.Не совсем то, что я ожидал (6, 35, 19, 56, 47
), поэтому я говорю "извините за это", вернитесь в ячейку и нажмите Ctrl + Shift + Enter :
6
, снова.
Итак, запустил «формулу оценки», и оказалось, что это ROW(A$1:A$11)
в положении k (последний аргумент) AGGREGATE
возвращал 1
вместо {1,2,3,4,5,6,7,8,9,10,11}
, независимо от того, использовали ли вы нормальную формулу или формулу Array.
Итак, я набираю массив вручную:
=TEXTJOIN(", ", TRUE, IFERROR(INDEX(B$1:B$11, AGGREGATE(15, 6, ROW(A$1:A$11)/--(A$1:A$11=E1), {1,2,3,4,5,6,7,8,9,10,11})),""))
Конечный результат: 6
.Я снова оцениваю формулу, и AGGREGATE
отбрасывает все, кроме первого значения из моего массива.Если я опускаю INDEX
и просто запускаю TEXTJOIN
для результатов AGGREGATE
, все работает нормально.Точно так же =SUM(ROW(B1:B11))
работает нормально, а =SUM(INDEX(B1:B11, ROW(B1:B11), 1))
- нет.
Вопрос:
Теперь я 95% уверен , что раньше я могзаставить эти INDEX(.., AGGREGATE(..))
и SUM(INDEX(..))
работать должным образом, вместо того, чтобы возвращать только первое значение - это что-то изменило в том, как определенные цепочки функций работают с массивами, или я просто неправильно помню?
(Для тех, кто заинтересован, в итоге мы использовали формулу массива =TEXTJOIN(", ", TRUE, IF(A$1:A$11=E1, B$1:B$11, ""))
)
Нежелательные данные, использованные при тестировании:
A | 6
A | 35
A | 19
B | 33
B | 46
B | 72
A | 56
C | 41
C | 20
B | 52
A | 47