查找多个项目
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)}
据我理解公式:
- 首先Excel运行索引函数。它在数组 A2 到 B6 上运行索引函数。
- 对于索引函数中的行号,它使用函数
SMALL(IF($B:$B = 1, ROW ($B:$B)), Row(1:1)
。这将检查数组 b2:b6,如果 B2:B6 中考虑的元素是 1,则它 return 是 b2:b6 的行号。在这种情况下,它将 return a 2.
- 此时我有点卡住了。我猜第二个 ROW 函数 returns 第一个案例 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 输入)。相应的范围如下所示:
我有一个姓名和号码列表
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)}
据我理解公式:
- 首先Excel运行索引函数。它在数组 A2 到 B6 上运行索引函数。
- 对于索引函数中的行号,它使用函数
SMALL(IF($B:$B = 1, ROW ($B:$B)), Row(1:1)
。这将检查数组 b2:b6,如果 B2:B6 中考虑的元素是 1,则它 return 是 b2:b6 的行号。在这种情况下,它将 return a 2. - 此时我有点卡住了。我猜第二个 ROW 函数 returns 第一个案例 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 输入)。相应的范围如下所示: