=LOOKUP(1,0/(MID(A1,ROW(1:999),1)="\"),ROW(1:999)) 3q3q^^最主要是0/(MID(A1,ROW(1:999),1)="\") 这个地方不太懂ROW(1:999)应该是返回行号的函数,那么是不是应该是返回数组{1,2,3.999}那函数LOOKUP 查找的次序应该是从
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/24 00:35:49
=LOOKUP(1,0/(MID(A1,ROW(1:999),1)="\"),ROW(1:999)) 3q3q^^最主要是0/(MID(A1,ROW(1:999),1)="\") 这个地方不太懂ROW(1:999)应该是返回行号的函数,那么是不是应该是返回数组{1,2,3.999}那函数LOOKUP 查找的次序应该是从
=LOOKUP(1,0/(MID(A1,ROW(1:999),1)="\"),ROW(1:999)) 3q3q^^
最主要是0/(MID(A1,ROW(1:999),1)="\") 这个地方不太懂
ROW(1:999)应该是返回行号的函数,那么是不是应该是返回数组{1,2,3.999}那函数LOOKUP 查找的次序应该是从A1的第一位开始,而不是最后一位开始,我主要是这个地方搞不清楚.
=LOOKUP(1,0/(MID(A1,ROW(1:999),1)="\"),ROW(1:999)) 3q3q^^最主要是0/(MID(A1,ROW(1:999),1)="\") 这个地方不太懂ROW(1:999)应该是返回行号的函数,那么是不是应该是返回数组{1,2,3.999}那函数LOOKUP 查找的次序应该是从
返回A1中,最后一个\的位置.
MID(A1,ROW(1:999),1)
对A1按位拆分,
MID(A1,ROW(1:999),1)="\" ,每一位与"\"比较,是"\"的为TRUE,不是的为FALSE.
在EXCEL中,TRUE为1,FALS为0,0除以1为0,除以0为错误值#DIV/0!.
用1去找,会找到最后一个0的位置,从而找到最后一个"\"的位置.
不错,ROW(1:999)返回的是{1,2,3.999},函数LOOKUP确实是从A1的第一位开始查找.
但你要注意,在LOOKUP开始查找前,还对数组进行了一些变形计算.即你不明白的0/(MID(A1,ROW(1:999),1)="\") 这部分.
假如A1是“第一串\第二串\第三串\第四串”,则MID(A1,ROW(1:999),1)会得到
{"第";"一";"串";"\";"第";"二";"串";"\";"第";"三";"串";"\";"第";"四";"串";"";……;""}
这个数组(超过实际字符串长度的部分以空返回).经过与“\”的比较,得到
{FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;……;FALSE}
即是“\”的为TRUE,不是的为FALSE.
然后用0去除以这个数组,得到
{#DIV/0!;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!;#DIV/0!;……;#DIV/0!}
注意,此时,数组只剩下0和#DIV/0!这两种值了.
LOOKUP函数用1在这个数组找,自然是找不到的.
那么看看LOOKUP函数的说明.如果函数 LOOKUP 找不到 lookup_value,则查找 lookup_vector 中小于或等于 lookup_value 的最大数值.
针对本实例可翻译成如果函数 LOOKUP 找不到 1,则查找数组中小于或等于1的最大数值.因#DIV/0!是错误值,不参与计算,所以小于等于1的最大值是0.
这个函数还有一个特点,就是有几个值相同的,会返回最后一个.