我更喜欢使用 MATCH() 而不是 SMALL():
=INDEX($R$4:$R$13,MATCH(1,($S$4:$S$13>0)*(COUNTIF($U$3:U3,$R$4:$R$13)=0),0))
它是一个数组公式,因此请使用 Ctrl-Shift-Enter。
此外,此公式要求它至少从第二行开始,因为 countif 需要引用上面的单元格以避免循环引用。
如果您确实想使用 SMALL() 那么您需要对起始行进行调整:
=INDEX($R$4:$R$13,SMALL(IF($S$4:$S$13>0,ROW($S$4:$S$13)-ROW($S$4)+1),ROW(1:1)))
或者正如 @dirk 指出的,数组部分是 SMALL() 而不是 INDEX,因此可以使用 INDEX 部分中的完整列并按原样使用 SMALL,因为它将返回实际的行号:
=INDEX($R:$R$,SMALL(IF($S$4:$S$13>0,ROW($S$4:$S$13)),ROW(1:1)))
也是一个数组公式,因此请使用 Ctrl-Shift-Enter 进行确认。
另一种方法是使用在没有 CSE 的情况下输入的 AGGREGATE 作为普通公式:
=INDEX($R:$R,AGGREGATE(15,6,ROW($R$4:$R$13)/($S$4:$S$13>0),ROW(1:1))
这将作为常规公式输入。它仍然是一个数组类型公式,因此仍然需要仅使用数据集作为引用,并避免在公式的数组部分中引用完整列。
当第一行中需要第一个返回结果时,最后两个特别有用,因为它们不需要 COUNTIF() 来维护唯一返回。