我有一个名单和数字列表
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)}
据我了解公式:
SMALL(IF($B$2:$B$6 = 1, ROW ($B$2:$B$6)), Row(1:1)
。这将检查数组b2:b6,如果B2:B6中考虑的元素为1,则返回行号b2:b6。在这种情况下,它将返回2。答案 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输入)。相应的范围如下: