查找多个项目

Lookup Multiple Items

我有一个姓名和号码列表

NAME    |    Number
Joe     |     1
Jane    |     0
Jack    |     1
Jill    |     0
John    |     1

我正在尝试查找数字并找出相应的名称 我的公式是

{=index($A:$B, SMALL(IF($B:$B = 1, ROW ($B:$B)), Row(1:1)), 1)}

据我理解公式:

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

  • INDEX 需要知道要检索的行。为此,我们要给它一个行号。
  • 为了获得行号,我们需要知道哪些项目符合条件。如果满足条件,我们使用 IF 条件来报告行号(否则我们得到 FALSE)。
  • 因为这会给我们一个行号数组,然后我们使用 SMALL 函数给我们一个 单个 值。这满足需要单行检索的 INDEX 函数。
  • 那么我们从SMALL中选择哪个值呢?好吧,我们只需使用 ROW(1:1) 给它一个 1-2-3-... 的序列。当它被复制下来时,它将变成 ROW(2:2)ROW(3:3) 等。其中每一个都将分别 return 1、2、3,因此我们得到下一个条目。请注意 SMALL 跳过 FALSE 因此它适用于 IF 调用的输出。

所以第一次调用ROW(在IF内)用于确定数组中符合条件的值所在的行。

第二次调用ROW(1:1)只是用来在公式被复制后得到递增序列。

最后要注意的是,您的公式将 在答案上偏移 一行,因为 ROW($B:$B) 将 return 的绝对行数这些行而不是与感兴趣数组的起始角相关的行。在这种情况下,您需要减去 1 才能使其正常工作(因为它从第 2 行开始)。在一般情况下,使用这样的公式来计算数组的偏移量:

=INDEX($A:$A,SMALL(IF($B:$B=1,ROW($B:$B)-ROW($B)+1),ROW(1:1)))

这是一个像您一样的数组公式(使用 CTRL+SHIFT+ENTER 输入)。相应的范围如下所示: