vlookup或index match将列表名称列在另一个下面作为Array

时间:2016-09-01 11:55:29

标签: excel indexing match

我正在尝试列出另一个满足分数的名字。在我的情况下,它需要超过7,我使用=INDEX($B$2:$B$16, SMALL(IF($E$2<=$C$2:$C$16, ROW($B$2:$B$16)-MIN(ROW($B$2:$B$16))+1, ""), ROW(A1)))作为数组。

我得到的输出正在陷入Test2。我究竟做错了什么。有没有更简单的方法来做到这一点

enter image description here

1 个答案:

答案 0 :(得分:1)

在这种情况下,我倾向于选择单细胞数组公式方法,即仅通过在单元格G2中输入适当的数组公式,然后根据需要进行复制。

如果您这样做,您当前的公式将按要求运作。

但是,当作为多单元数组公式输入时,即首先选择所需范围(例如G2:G8),然后在公式栏中输入公式,然后提交,您用于SMALL k 参数的构造,即:

ROW(A1)

根据需要,不会以行相对方式处理

;事实上,对于公式的每个实例,它将保持与上面一样,而不是 - 就像我们将相应的单格单元版本复制到以下情况一样: -

ROW(A2)

ROW(A3)

ROW(A4)

...

如果您坚持继续在此处使用多单元数组公式,则需要使用不合格的 ROW作为此参数,即:

=INDEX($B$2:$B$16,SMALL(IF($E$2<=$C$2:$C$16,ROW($B$2:$B$16)-MIN(ROW($B$2:$B$16))+1,""),ROW()-1))

或者,由于以上不是很健壮,也不灵活(不合格,ROW()取决于公式所在的行;因此,在您的情况下,由于您的第一个公式在第2行,我们需要将此值偏移-1),我们可以使用更好(虽然稍长):

=INDEX($B$2:$B$16,SMALL(IF($E$2<=$C$2:$C$16,ROW($B$2:$B$16)-MIN(ROW($B$2:$B$16))+1,""),ROW($B$2:$B$16)-MIN(ROW($B$2:$B$16))+1))

在任何情况下,即使对于单细胞版本,ROW也比ROWS更差,用于生成增量整数(https://excelxor.com/2014/08/25/row-vs-rows-for-consecutive-integer-generation/),尽管遗憾的是ROWS不是多单元版本的选项,这是我个人倾向于在单个多单元格上更喜欢一系列单单元格数组公式的原因之一。

我个人的偏好是单细胞阵列公式:

=INDEX(B:B,SMALL(IF($E$2<=$C$2:$C$16,ROW($B$2:$B$16)),ROWS($1:1)))

并向下复制,但我也可能添加一个子句来掩盖超出预期返回数的单元格中的错误,例如:

=IF(ROWS($1:1)>A$1,"",INDEX(B:B,SMALL(IF($E$2<=$C$2:$C$16,ROW($B$2:$B$16)),ROWS($1:1))))

其中A1包含计算预期回报数的公式,例如:

=COUNTIF($C$2:$C$16,">="&$E$2)

这对于资源丰富的IFERROR设置(https://superuser.com/questions/812727/look-up-a-value-in-a-list-and-return-all-multiple-corresponding-values)来说是优选的(特别是在大范围内)。

我还应该说,如果被查询的数据是Excel表格的一部分,我会使用略有不同的版本。

此致