查找多个项目

我有一个名字和数字的列表

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函数。
  • 那么我们从SMALLselect哪个值? 那么,我们通过使用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)。 相应的范围如下所示:

范围为公式