答案1
我假设屏幕截图是您的数据表,而用于指定标准的两个下拉菜单位于其他地方。
此公式从以下视频中的 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)),"")
这是一个数组公式,必须用 输入CTRLShiftEnter。
我希望这个帮助能祝你好运。 ______________________________________________________________________________
怎么运行的:内部函数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
,其中散布着下拉列表中每个值出现的行号。
此数组被提供给函数,该函数执行的操作与 (function=15)AGGREGATE()
相同,只是它有一个忽略错误的选项 (option=6)。因此,忽略错误,并给出一个数组,该数组仅包含 C$17 下拉列表中值的行号,因为函数已向下填充。此数组用作另一个中的,它返回与这些行号相对应的系统列表。SMALL()
AGGREGATE()
#DIV/0!
row-num
INDEX()
最后,IFERROR()
每当出现错误时都会插入一个空白INDEX()
,因为它的填充数量超过了 row_nums 列表中值的数量。
我把这个公式放在第 17 行,所以最后一个ROW()-16
列表以数组中的第一个 row_num 开始。因此,您应该将最后一个“16”更改为比公式所在行号小 1。