答案1
对于 2016 年及更早的版本,我们需要使用某种形式的 SMALL INDEX。我喜欢 AGGREGATE,因为它可以忽略错误。
基本的聚合是:
AGGREGATE(15,7,ROW($B$2:$B$7)/(ISNUMBER(MATCH($B$2:$B$7,{"ALFA","DEN"},0))),ROW($ZZ1)))
当它迭代 $B$2:$B$7 中的单元格时,它会返回一个行号和错误的数组。这7
告诉公式忽略错误。
ROW($ZZ1)
1
是一个从 开始然后向下拖动到下一个的计数器。这告诉 Aggregate 将数组中的哪一个返回到 INDEX。
然后我们将其包装在 INDEX 中:
=IFERROR(INDEX(A:A,AGGREGATE(15,7,ROW($B$2:$B$7)/(ISNUMBER(MATCH($B$2:$B$7,{"ALFA","DEN"},0))),ROW($ZZ1))),"")
注意,AGGREGATE 中的引用是特定于数据集的,而索引不是。我们希望限制 AGGREGATE 中的引用,以限制迭代次数。
然后我们只需将A:A
索引中的替换为C:C
即可获得第二列。并将两个公式向下拖动,直到得到空白
在 Office 365 中这变得容易得多:
=FILTER(CHOOSE({1,2},A:A,C:C),ISNUMBER(MATCH(B:B,{"ALFA","DEN"},0)))
结果将自动溢出。