请高人指点这个公式的含义“=-LOOKUP(,-MIDB(A1,SEARCHB("?",A1),ROW($1:$15)))”,如下图的结果
ROW($1:$15)里面$1:$15表示什么意思?SEARCHB("?",A1)里面“?”表示什么意思?MIDB之前为什么加“-”号?LOOKUP查找值为什么是空值?...
ROW($1:$15)里面$1:$15表示什么意思?SEARCHB("?",A1)里面“?”表示什么意思?MIDB之前为什么加“-”号?LOOKUP查找值为什么是空值?
展开
3个回答
展开全部
公式解释起来比较复杂,尤其是这种高技巧公式:
$1:$15是1到15行,ROW($1:$15)是返回1到15行的行号,也就是1到15,公式中这样用,就是取1到15个字符,事实上没这么多吧,用15是为了多取点,不超过范围;
SEARCHB("?",A1)里面“?”是通配符,单字节,SEARCHB是双字节函数,结合MIDB取出第一个单字节开始(必须是数字)的数字,此处用了两个双字节函数,是单元格内容可能是中文开始的,接着后面含数字的混合内容,数字后面是否含其它内容无妨,但开头中文后必须是数字,不能是其它单字节字符;
MIDB之前加“-”,是将数字转为负值,结合LOOKUP函数使用;
LOOKUP查找值并不是空值,而是省略了,默认为0,因为MIDB之前加了“-”,LOOKUP查找区域中要么是错误值,要么是负数,是查不到0的,返回最后一个不大于0的数据;
LOOKUP返回值是一个负数,所以公式中LOOKUP前也有一个“-”,将其转为正值:=-LOOKUP(,-MIDB(A1,SEARCHB("?",A1),ROW($1:$15)))
展开全部
=-LOOKUP(,-MIDB(A1,SEARCHB("?",A1),ROW($1:$15)))
这个公式中
ROW($1:$15)里面$1:$15表示什么意思
实际意思就是形成1到15这个数组数据 加上$标记的作用是无论公式复制到哪里,这个参数都不便,都是1-15这组数字。
SEARCHB("?",A1)里面“?”表示什么意思?
?代表任何单字符数据,比如 SEARCHB("?",A1) 天气123很好 的结果就是5,也就是对应第一个 英文(数字)字符所在的位置。
MIDB之前为什么加“-”号
前面加减号的意思有两个,主要作用是让后面数组公式形成的数据形成 倒数,(也就是之前越大的就越小,比如你的数据 10.3个提取出来本来是 1、10、10.、10.3这样一组数据,倒过来就变成了 -1、-10、-10.、-10.3 这样一组数据)配合lookup函数“向下兼容的特性”使用非常巧妙!
- 另外一个作用比较常用在mid函数那里,是让取出的文本变成数字计算,本处无此功用。
LOOKUP查找值为什么是空值
这个仅仅只是为了简便,实际上就是 0 。
这个公式中
ROW($1:$15)里面$1:$15表示什么意思
实际意思就是形成1到15这个数组数据 加上$标记的作用是无论公式复制到哪里,这个参数都不便,都是1-15这组数字。
SEARCHB("?",A1)里面“?”表示什么意思?
?代表任何单字符数据,比如 SEARCHB("?",A1) 天气123很好 的结果就是5,也就是对应第一个 英文(数字)字符所在的位置。
MIDB之前为什么加“-”号
前面加减号的意思有两个,主要作用是让后面数组公式形成的数据形成 倒数,(也就是之前越大的就越小,比如你的数据 10.3个提取出来本来是 1、10、10.、10.3这样一组数据,倒过来就变成了 -1、-10、-10.、-10.3 这样一组数据)配合lookup函数“向下兼容的特性”使用非常巧妙!
- 另外一个作用比较常用在mid函数那里,是让取出的文本变成数字计算,本处无此功用。
LOOKUP查找值为什么是空值
这个仅仅只是为了简便,实际上就是 0 。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
=-LOOKUP(,-MIDB(A1,SEARCHB("?",A1),ROW($1:$15)))
先从最内层开始看,
ROW($1:$15)生成一个1-15的序列,即(1;2;3;4;5;6......)
SEARCHB("?",A1),查找A1单元格中第一个半角字符,此为1
MIDB(A1,SEARCHB("?",A1),ROW($1:$15)),在A1单元格中,从第一个半角字符开始截取,截取位数为1-15位(即形成一个1 10 10.3 10.3个 10.3个 10.3个......这样的内存数组)
前边再加负号(-),将截取的文本数值中是数字的转变为数值且变为了负数。
LOOKUP(,-MIDB(A1,SEARCHB("?",A1),ROW($1:$15))),这是一个简略写法,完整写法第一参数为0,即LOOKUP(0,-MIDB(A1,SEARCHB("?",A1),ROW($1:$15))),查找序列中不大于0的最末尾的值,
前边再加负号(-),将原来变成负数的值再变为原值。
先从最内层开始看,
ROW($1:$15)生成一个1-15的序列,即(1;2;3;4;5;6......)
SEARCHB("?",A1),查找A1单元格中第一个半角字符,此为1
MIDB(A1,SEARCHB("?",A1),ROW($1:$15)),在A1单元格中,从第一个半角字符开始截取,截取位数为1-15位(即形成一个1 10 10.3 10.3个 10.3个 10.3个......这样的内存数组)
前边再加负号(-),将截取的文本数值中是数字的转变为数值且变为了负数。
LOOKUP(,-MIDB(A1,SEARCHB("?",A1),ROW($1:$15))),这是一个简略写法,完整写法第一参数为0,即LOOKUP(0,-MIDB(A1,SEARCHB("?",A1),ROW($1:$15))),查找序列中不大于0的最末尾的值,
前边再加负号(-),将原来变成负数的值再变为原值。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询