为什么LOOKUP不匹配数组中的第一个元素?

时间:2014-10-06 19:42:41

标签: excel excel-formula lookup

以下是我的Excel工作簿的截图

enter image description here

我不明白为什么单元格j7中的值为44

j7公式为=LOOKUP(1,(TRIM($D$2:$D$9)=TRIM(H7))/(TRIM($E$2:$E$9)=TRIM(I7)),$F$2:$F$9)

两个数组除法的结果如下

{TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}/ {TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE} = {1;#DIV/0!;0;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!} 对 ?

所以我正在寻找1,基本上公式变为

LOOKUP(1,{1;#DIV/0!;0;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!},$F$2:$F$9)

因此,结果应该是10,而不是44。 。 。 。 。 ?


修改

当我将公式更正为=LOOKUP(1,1/(TRIM($D$2:$D$9)=TRIM(H7))/(TRIM($E$2:$E$9)=TRIM(I7)),$F$2:$F$9)

它工作正常。为什么?感谢大家提供matchindex的替代解决方案。我只是不明白为什么我的第一个配方不起作用。任何为什么当我添加1/时它的神奇之处? ? ?

3 个答案:

答案 0 :(得分:3)

如果值不是按升序排列,并且您正在寻找值范围内的值(而不是大于范围内任何值的值),则LOOKUP可能会产生意外结果。

返回所需结果的另一种方法是使用INDEX和MATCH的组合:

=INDEX($F$2:$F$9,MATCH(1,(TRIM($D$2:$D$9)=TRIM(H7))/(TRIM($E$2:$E$9)=TRIM(I7)),0))

ctrl-shift-enter

作为数组公式输入

请注意,使用MATCH寻找完全匹配时,不需要对范围进行排序。

另一个会返回正确结果的公式,并且可以正常输入(假设第一个表中没有重复的条目):

=SUMPRODUCT((TRIM(H7)=TRIM($D$2:$D$9))*(TRIM(I7)=TRIM($E$2:$E$9))*$F$2:$F$9)

答案 1 :(得分:2)

解释是:

使用第一个公式,Lookup函数中的第一个数组在1值之后包含零,在数组的第三个和第六个值中:

enter image description here

Lookup期望数据按升序排序,并将从数组中的最后一个值开始返回小于或等于搜索值的第一个项目。在这种情况下,这是数组第六个位置的零值。

编辑后的公式会生成一个只包含一个数字“1”的数组。所有其他值都是Div错误。因此,“1”值的位置是Lookup将使用的。

enter image description here

进一步解释:

在第一个公式中,您将两个包含TRUE或FALSE的数组分开,结果包含1,0和Div错误值。

{TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}/
{TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE} =
{1;#DIV/0!;0;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!}

在公式中包含1/会将第一个TRUE和FALSE值数组除以1,这将返回一个由1或Div错误组成的数组。进一步将该数组除以第二个数组只会返回1或Div错误,不会返回0。步骤是

1/{TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}/{TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE}会产生

{1;1;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!}/{TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE}会产生

{1;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!}

没有零!

答案 2 :(得分:1)

如上所述,LOOKUP期望lookup_vector中的值按升序排列。获得H&列的第一场比赛我到D&列E,我建议在数学上排除不匹配的行。剩下的就是匹配的行。以下示例提供了第一个双匹配。

对于J2

=INDEX($F$2:$F$9,MIN(INDEX(ROW($1:$8)+(($D$2:$D$9<>H2)+($E$2:$E$9<>I2))*1E+99,,)))

根据需要填写。这是一个标准公式,可以通过交换SMALL()代替MIN()轻松修改以提供第2,第3等匹配值。您的结果应该接近以下内容。

enter image description here