查找多个项目

时间:2015-05-13 18:29:58

标签: excel excel-formula lookup

我有一个名单和数字列表

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运行索引功能。它在数组A2到B6上运行索引函数。
  • 对于index函数中的行号,它使用函数SMALL(IF($B$2:$B$6 = 1, ROW ($B$2:$B$6)), Row(1:1)。这将检查数组b2:b6,如果B2:B6中考虑的元素为1,则返回行号b2:b6。在这种情况下,它将返回2。
  • 此时我有点卡住了。我猜第二个ROW函数返回从小函数
  • 派生的第一个案例
  • 最后,index函数查找找到索引的第1列中的名称。

1 个答案:

答案 0 :(得分:1)

你对这个公式的理解非常好。我假设您要将其复制到足够的行以获取所有报告的值?如果是这样,以下是正在发生的事情:

  • INDEX需要知道要检索的行。为了做到这一点,我们将给它一个行号。
  • 为了获得行号,我们需要知道哪些项符合条件。如果满足条件,我们使用IF条件报告行号(否则我们得到FALSE)。
  • 由于这将为我们提供一系列行号,然后我们使用SMALL函数为我们提供值。这满足了需要单行检索的INDEX函数。
  • 那么我们从SMALL中选择哪个值?好吧,我们只使用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)将返回这些行的绝对行数而不是相对于感兴趣的数组的起始角落。在这种情况下,您需要减去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 + ENTER输入)。相应的范围如下:

range for formula