|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
原帖由 一剑惊心 于 2010-12-11 20:48 发表
把空格全部替换掉就行了
可以使用下述数组公式,智能化判断起始数字位置,以及结束数字位置,
于是用mid()函数取数字就可以啦:
=MID(A3,MATCH(1,IF(ISNUMBER(VALUE(MID(A3,ROW($1:$9),1))),1,0),0),LARGE(IF(ISNUMBER(VALUE(MID(A3,ROW($1:$9),1))),ROW($1:$9),0),1)-MATCH(1,IF(ISNUMBER(VALUE(MID(A3,ROW($1:$9),1))),1,0),0)+1)
———————————————————
函数详解:
1. 起始数字:
=MATCH(1,IF(ISNUMBER(VALUE(MID(A3,ROW($1:$9),1))),1,0),0)
原理是:用match函数查找第一个=1的值的位置。
=MATCH(1,【if判断】,0)
首先,第一步用mid()函数加row()数组拆分1-9的每一个字符。
MID(A3,ROW($1:$9),1)
用value()函数评价,转换字符为数字
VALUE(MID(A3,ROW($1:$9),1))
再用isnumber()函数来判断是否为数字
ISNUMBER(VALUE(MID(A3,ROW($1:$9),1)))
最后,用if()函数来转化为0,1状态。
即是数字时取值1,不是数字时取值0。
IF(ISNUMBER(VALUE(MID(A3,ROW($1:$9),1))),1,0)
最后的最后,得到起始数字在该单元格字符中的位置
=MATCH(1,IF(ISNUMBER(VALUE(MID(A3,ROW($1:$9),1))),1,0),0)
++++++++++++++++++++++++++++++++++++++++
2. 最后一个数字的位置:
=LARGE(IF(ISNUMBER(VALUE(MID(A3,ROW($1:$9),1))),ROW($1:$9),0),1)
原理是:用large函数查找最大值的位置。
=LARGE(【if判断】,1)
首先,第一步用mid()函数加row()数组拆分1-10的每一个字符。
MID(A3,ROW($1:$9),1)
用value()函数评价,转换字符为数字
VALUE(MID(A3,ROW($1:$9),1))
再用isnumber()函数来判断是否为数字
ISNUMBER(VALUE(MID(A3,ROW($1:$9),1)))
最后,用if()函数来转化,是数字时取对应的row()数组序列,不是数字时取0。
IF(ISNUMBER(VALUE(MID(A3,ROW($1:$9),1))),ROW($1:$9),0)
最后的最后,得到最终数字在该单元格字符中的位置
=LARGE(IF(ISNUMBER(VALUE(MID(A3,ROW($1:$9),1))),ROW($1:$9),0),1)
=======================================
知道了【起始数字位置】和【结束数字位置】,
那么使用mid()函数就可以得到数字,而不用担心前后出现的code=63的未知字符了。
即,有效数字范围字符长度=【结束数字位置】-【起始数字位置】+1
那么对于A3单元格来说:
=mid(A3,【起始数字位置】,【结束数字位置】-【起始数字位置】+1)
====================
最后的公式会比较长,有188个字符呢:
=MID(A3,MATCH(1,IF(ISNUMBER(VALUE(MID(A3,ROW($1:$9),1))),1,0),0),LARGE(IF(ISNUMBER(VALUE(MID(A3,ROW($1:$9),1))),ROW($1:$9),0),1)-MATCH(1,IF(ISNUMBER(VALUE(MID(A3,ROW($1:$9),1))),1,0),0)+1)
不要忘记这是数组公式,
ctrl+shift+回车
请一剑惊心老师检查是否可以简化! |
|