Я собираюсь предположить, что скриншот - это ваша таблица данных, и два раскрывающихся списка для определения критериев находятся в другом месте.
Эта формула, заполненная с B17 в видео ниже, перечисляет системы, соответствующие критериям:=IFERROR(INDEX(A$2:A$13,AGGREGATE(15,6,ROW(A$1:A$12)/(INDEX(B$2:H$13,,MATCH(C$18,B$1:H$1))=C$17),ROW()-16)),"")
Это формула массива, и ее нужно вводить с помощью клавиши CTRL Shift Enter.
Надеюсь, это поможет, и удачи.
______________________________________________________________________________
Как это работает: Внутренний INDEX()
возвращает весь столбец таблицы данных, выбранный с раскрывающимся списком "Doc" в C$18
. Тогда равенство =C$17
возвращает массив значений TRUE/FALSE
с TRUE
в каждой позиции, где ячейка содержит выбор в раскрывающемся списке C$17
.
ROW(A$1:A$12)
дает массив последовательных чисел {1;2;3;...12}
, который делится на массив TRUE/FALSE
.
В арифметических операциях, включающих логические значения, TRUE
и FALSE
преобразуются в 1 и 0. Таким образом, деление дает массив #DIV/0!
ошибки для каждого FALSE
, чередующиеся с номерами строк каждого вхождения значения из выпадающего списка.
Этот массив передается в функцию AGGREGATE()
которая выполняет те же действия, что и SMALL()
(function = 15), за исключением того, что она имеет возможность игнорировать ошибки (option = 6). Так AGGREGATE()
игнорирует #DIV/0!
ошибки, и дает массив, содержащий только номера строк значений из выпадающего списка C $ 17, по мере заполнения функции. Этот массив используется в качестве номера row-num
в другом INDEX()
, который возвращает список систем, соответствующих этим номерам строки.
Наконец, IFERROR()
вставляет пробел всякий раз, когда INDEX()
выдает ошибку, так как он заполняется дальше, чем количество значений в его списке row_nums.
Я поместил эту формулу в строку 17, поэтому последний ROW()-16
начинает список с 1-го row_num в массиве. Таким образом, вы должны изменить последние "16" на единицу меньше номера строки, где у вас есть формула.