|
本帖最后由 hjj0451 于 2012-2-9 15:29 编辑
打开LOOKUP帮助文件,关于其向量形式的描述有(见上图):
LOOKUP(lookup_value,lookup_vector,result_vector)
Lookup_vector 为只包含一行或一列的区域。Lookup_vector 的数值可以为文本、数字或逻辑值。
............
Result_vector 只包含一行或一列的区域,其大小必须与 lookup_vector 相同。
在实际使用中,LOOKUP_VALUE和RESULT_VALUE实际可以是:一个为行向量(大小为1*N)、一个为列向量(大小为N*1)
如下式,结果正确为2,第二参数为行向量,第三参数为列向量,我们不能说行向量与列向量大小相同:
- =LOOKUP("b",{"a","b","c"},{1;2;3})=2
复制代码 甚至,如此整列引用,一样能返回预想的正确值:
- =LOOKUP("B",{"a","b","c"},ROW(A:A))=2
复制代码 在LOOKUP帮助文件的实例中,也没见有一个为行向量一个为列向量的例子,因此帮助文件的“Result_vector 只包含一行或一列的区域,其大小必须与 lookup_vector 相同”是值得商榷的。
另外,借用3楼杏花雨老师的例子:
- =LOOKUP("A",{"a","b","c"},{1,2,3,4,5,6})=1
复制代码 ,向量个数不同,方向相同。(补:LOOKUP忽略大小写)
- =LOOKUP("a",{"a","b","c"},{1;2;3;4;5;6})=1
复制代码 ,向量个数不同,方向亦不相同
- =LOOKUP("a",{"a","b","c"},{1,2,3;4,5,6})=#N/A
复制代码 ,返回错误
- =LOOKUP("d",{"a","b","c"},{1,2,3,4,5,6})=3
复制代码 ,向量个数不同,方向相同,按“查找小于等于查找值的最大值的原则而查找”c",正常返回3
- =LOOKUP("d",{"a","b","c"},{1;2;3;4;5;6})=3
复制代码 ,向量个数不同,方向亦不相同,按“查找小于等于查找值的最大值的原则而查找”c",正常返回3
- =LOOKUP("e",{"a","b","c"},{1;2;3;4;5;6})=3
复制代码 ,向量个数不同,方向亦不相同,按“查找小于等于查找值的最大值的原则而查找”c",正常返回3
再看看,第二个向量是否要升序排列:
- =LOOKUP("b",{"f","b","e"},ROW(A:A))=2
复制代码 也不用升序排列,一样能找到b对应的2。
- =LOOKUP("f",{"z","b","e","f"},{8;2;3;4;5;7;9;-1;0})=4
复制代码 也不用升序排列,一样能找到f对应的4。
对于下面,大家熟知,返回最后一个:
- =LOOKUP("z",{"y","b","e","t","f"},{8;2;3;4;5;7;9;-1;0})=5
复制代码 但是,对于下面的乱序且不满足查找值大于所有被查找值,也许是按”二分法“,却返回了意外的结果:
- =LOOKUP("y",{"z","b","e","t","f"},{8;2;3;4;5;7;9;-1;0})=5
复制代码 在第一个向量的个数比第二个小的情况下一样可行:
- =LOOKUP(2,ROW(1:3),CHAR(COLUMN(DK:IV)))="t"
复制代码- =LOOKUP(2,ROW(1:3),{"c","v","d","k","o"})="v"
复制代码- =LOOKUP(5,ROW(A1:A3),{"c","v","d","k","o"})="d"
复制代码 第一个向量降序的情况下,也一样:
- =LOOKUP(5,7-ROW(A1:A3),{"c","v","d","k","o"})=“v"
复制代码- =LOOKUP(9,7-ROW(A1:A3),{"c","v","d","k","o"})="d"
复制代码 但查找向量( lookup_vector)是一维、结果向量(Result_vector)是二维的话则是不行的:
- =LOOKUP(9,7-ROW(A1:A3),{"c","v","d","k","o";"k","n","y","p","y"})=#N/A
复制代码- =LOOKUP(2,{1,2,3},{4,6;5,7;3,4})=#N/A
复制代码 反之,查找向量二维,结果向量一维是可行的:
=LOOKUP(2,{1,2,3;4,5,6},{4,6,5})=6
=LOOKUP(5,{1,2,3;4,5,6},{4,6,5})=5,相当于=LOOKUP(5,{1,2,3},{4,6,5})=5,也就是查找向量自动忽略比结果向量多余的"维",第二行失去功能,然后再象上面那样进行查找。但结果向量维数比查找向量维数多的话,LOOKUP就不知道选取哪个了。
但前面的情况却证明,查找向量与结果向量同维的情况下,LOOKUP允许两者个数不相同,只要在LOOKUP_VECTOR里找到的数在Result_vector里有对应的项即可,而不关心到底谁有几个元素,谁是行还是列。
总结一下,关于LOOKUP(lookup_value,lookup_vector,result_vector):
1. lookup_vector和result_vector允许一个是行(列)向量、一个是列(行)向量,即允许方向不相同;
2. lookup_vector和result_vector允许两个向量个数不相同,只要找到的数有对应值即可返回正确结果;
3. lookup_vector和result_vector不同维,也就是其中有1个不再是向量的时候,有两种情况:
3.1 result_vector为2维且lookup_vector为1维,此时不管找没找到,都返回#N/A.LOOKUP无法辨认是在与Lookup_vector对应的"维"返回,还是在多出的"维"返回;
3.2 result_vector为1维且lookup_vector为2维,此时也能返回正确结果,此时相当于查找向量忽略了比结果向量多的行/列,按向1、2的原则进行查找。
3.3 result_vector为2维且lookup_vector为2维,即两者都不再是向量,此时也符合3.1的情况,返回#N/A
4. 待补充。
5.关于LOOKUP二分法参见http://club.excelhome.net/forum.php?mod=viewthread&tid=113915
看来此帮助文件“Result_vector只包含一行或一列的区域,其大小必须与 lookup_vector 相同”后半段的确是一厢情愿。
从LOOKUP向量用法帮助文件谈LOOKUP向量用法(new).rar
(95.38 KB, 下载次数: 215)
|
评分
-
6
查看全部评分
-
|