Вам понадобится временный рабочий столбец, который может (необязательно) находиться на скрытом листе.
Затем вы можете использовать INDEX
для извлечения значений из столбца (INDEX(DropDown!A:A,ROWNUM,1)
- нам просто нужно выяснить, из какой строки получать данные.
Очень полезная функция здесь - AGGREGATE
- это позволяет нам использовать функциональность таких вещей, как SUM
, MIN
, COUNTA
или SMALL
при пропуске скрытых строк и / или значений ошибок. В этом случае мы хотим SMALL
(получить k th наименьшее число из списка), и мы будем использовать ISBLANK
, чтобы сгенерировать ошибку #DIV0!
, когда клетка пуста.
Для скорости расчета будут обрабатываться только первые 100 строк в столбце A
AGGREGATE(15, 6, ROW(DropDown!$A$1:$A$100)/--NOT(ISBLANK(DropDown!$A$1:$A$100)), ROW())
Первый бит (AGGREGATE(15, 6,
) означает, что мы хотим SMALL
и исключаем любые строки с ошибками. Последний бит (, ROW())
) означает, что в строке 1 st нам нужно наименьшее значение, затем в строке 2 nd следующее наименьшее и т. Д., Пока мы не запустим из значений без ошибок.
Средний бит (ROW(DropDown!$A$1:$A$100)/--NOT(ISBLANK(DropDown!$A$1:$A$100))
) начинается с выбора номера строки для каждой ячейки из раскрывающегося списка и деления его на 1 (если ячейка не пустая) или 0 (если ячейка пуста). Все, что разделено на 1, само по себе дает номер строки, а все, что разделено на 0, даст ошибку.
Затем мы можем вставить это в нашу INDEX
формулу как строку для извлечения, например так:
=INDEX(DropDown!$A:$A, AGGREGATE(15, 6, ROW(DropDown!$A$1:$A$100)/--NOT(ISBLANK(DropDown!$A$1:$A$100)), ROW()), 1)
Затем вы можете назначить свой выпадающий список этому списку (или установить динамический именованный диапазон, который будет автоматически изменять размер, например =OtherDropDown!$A$1:INDEX(OtherDropDown!$A:$A,COUNTA(DropDown!$A:$A),1)
)