查找多个项目
我有一个名字和数字的列表
NAME | Number Joe | 1 Jane | 0 Jack | 1 Jill | 0 John | 1
我试图查找数字,找出相应的名称我有的公式是
{=index($A$2:$B$6, SMALL(IF($B$2:$B$6 = 1, ROW ($B$2:$B$6)), Row(1:1)), 1)}
据我了解的公式:
- 第一个Excel运行索引function。 它运行数组A2到B6的索引函数。
- 对于索引函数中的行号,它使用函数
SMALL(IF($B$2:$B$6 = 1, ROW ($B$2:$B$6)), Row(1:1)
,b2:b6,如果B2:B6中考虑的元素是1,则返回b2:b6的行号,在这种情况下返回2。 - 在这一点上,我有点卡住了。 我猜测,第二个ROW函数返回从小函数派生的第一个情况
- 最后,索引函数findfind的索引位于列1中的名称。
你对这个公式的理解是相当不错的。 我假设你要复制足够的行以获得所有报告的值? 如果是这样,这是发生了什么事情:
-
INDEX
需要知道要检索的行。 为了做到这一点,我们要给它一个行号。 - 为了得到一个行号,我们需要知道哪些项目符合条件。
IF
条件,我们使用IF
条件来报告行号(否则我们得到FALSE
)。 - 因为这会给我们一个行数的数组,我们然后使用
SMALL
函数给我们一个单一的值。 这满足了需要单行检索的INDEX
函数。 - 那么我们从
SMALL
select哪个值? 那么,我们通过使用ROW(1:1)
来给它一个1-2-3 -…的序列。 当它被拷贝下来时,它将变成ROW(2:2)
,ROW(3:3)
等等。每个都会分别返回1,2,3,所以我们得到下一个条目。 请注意,SMALL
跳过FALSE
因此适用于IF
调用的输出。
因此,第一次调用ROW
(在IF
)用于确定数组中与条件匹配的行的值。
第二次调用ROW(1:1)
只是用来获取一个递增的序列,一旦公式被抄下来。
最后需要注意的是,你的公式将在答案上偏离一行 ,因为ROW($B$2:$B$6)
将返回那些行的绝对行号,而不是相对于感兴趣的arrays。 在这种情况下,您需要减去1才能使其工作(因为它从第2行开始)。 在一般情况下,使用这样的公式,它占了数组的偏移量:
=INDEX($A$2:$A$6,SMALL(IF($B$2:$B$6=1,ROW($B$2:$B$6)-ROW($B$2)+1),ROW(1:1)))
这是一个像你一样的数组公式(用CTRL + SHIFT + ENTERinput)。 相应的范围如下所示: