原始数据:
目标数据:
公式:
=LOOKUP(1,0/(($C$2:$C$11=$N2)*($B$2:$B$11=O$1)),$D$2:$D$11)
lookup函数解析:
二分法查找:
定义三个索引值:最大值max,最小值min,中值mid=(max+min)/2取整
1,数据排序(升序)
2,循环查询mid的值,判断目标值与查询值关系:
相等:获取目标,结束循环;
目标值大于查询值:min=mid+1,mid=(max+min)/2取整;
目标值小于查询值:max=mid-1,mid=(max+min)/2取整。
lookup函数采用二分法查找,默认查询区域升序排列(若查询区域未排序,可能返回的结果不正确),
获取目标后,会查询相邻的下一个,若相邻下一个等于目标值,继续向下查询,
直到连续相邻的值不等于目标值,记录最后一个符合条件的值(索引)
如,查询A:
在A5(第1个二分位)查找到了A,本来查找结果应该是B5的860,但由于A6的值也是A,
所以查找结果变成了第6行的值。而A8虽然也是A,但和A5不是连续相邻相等区域。所以结果不是B8。
lookup函数查询时,若查询序列没有与目标值相等的值,会返回小于目标值且最接近目标值的值:
如,查询350的提成比例:
查找过徎:
从第1个二分位处(A4)处开始查找,200<350,向下查找。
在第2个二分位处(A6)的值400>350,所以要向上查,上面只有A5一个值300,且该值小于350,
所以B5的值即为最终查找结果。