vlookup或索引匹配,将一个名称下的名称作为一个数组
我试图列出满足分数的其他名字。 在我的情况下,它需要超过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。 我究竟做错了什么。 有没有更简单的方法来做到这一点
在这种情况下,我倾向于select单元arrays公式方法,即只通过在单元格G2
input适当的数组公式,然后根据需要复制。
如果你这样做,你目前的公式将按要求运作。
但是,当作为多单元格arrays公式input时,即通过首先select所需的范围(例如G2:G8
),然后在公式栏中input公式,然后提交,使用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()
取决于公式所在的行;因此,对于你的情况,由于你的第一个公式在第二行,我们需要抵消这个值由-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-第一代/ ),虽然令人遗憾的是ROWS
也不是多单元版本的select,这也是我个人倾向于在单个多单元arrays上使用一系列单单元arrays公式的原因之一。
我个人的偏好是单细胞数组公式:
=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 Table的一部分,我会使用稍微不同的版本。
问候