以下是我的Excel工作簿的截图
我不明白为什么单元格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)
它工作正常。为什么?感谢大家提供match
和index
的替代解决方案。我只是不明白为什么我的第一个配方不起作用。任何为什么当我添加1/
时它的神奇之处? ? ?
答案 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值之后包含零,在数组的第三个和第六个值中:
Lookup期望数据按升序排序,并将从数组中的最后一个值开始返回小于或等于搜索值的第一个项目。在这种情况下,这是数组第六个位置的零值。
编辑后的公式会生成一个只包含一个数字“1”的数组。所有其他值都是Div错误。因此,“1”值的位置是Lookup将使用的。
进一步解释:
在第一个公式中,您将两个包含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等匹配值。您的结果应该接近以下内容。