为什么LOOKUP不匹配数组中的第一个元素?
这是我的Excel工作簿的截图
我不明白为什么单元格j7
的值是44
?
j7
公式=LOOKUP(1,(TRIM($D$2:$D$9)=TRIM(H7))/(TRIM($E$2:$E$9)=TRIM(I7)),$F$2:$F$9)
两个arrays划分的结果如下
{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
的替代解决scheme。 我只是不明白为什么我的第一个公式不起作用。 任何为什么当我加1/
它MAGICALLY作品? ? ?
解释是:
使用第一个公式,Lookup函数中的第一个数组在第一个数组的第三个值和第六个数值后面包含零:
查找期望数据按升序sorting,并将返回小于或等于search值的第一项,从数组中的最后一个值开始。 在这种情况下,这是数组中第六个位置的零值。
编辑过的公式会生成一个只包含一个数字“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错误,不为零。 步骤是
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!}
没有零!
如果值不是按升序排列,而且您正在查找值范围内的值(而不是值大于范围内的任何值),则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-enterforms作为数组公式input
请注意,使用MATCH,查找完全匹配,范围不需要sorting。
另一个公式将返回正确的结果,并且可以正常input(假设第一个表中没有重复条目):
=SUMPRODUCT((TRIM(H7)=TRIM($D$2:$D$9))*(TRIM(I7)=TRIM($E$2:$E$9))*$F$2:$F$9)
如上所述, LOOKUP
预计lookup_vector中的值将按升序排列。 为了获得H&I列到D&E列的第一次匹配,我build议在math上排除不匹配的行。 剩下的就是匹配的行。 以下示例提供了第一个双重匹配项。
对于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()
来轻松修改以提供第二,第三等匹配值。 您的结果应该接近以下内容。