以下是引用wangshp在2006-7-22 9:23:53的发言:能解释一下这个公式的具体意思及思路吗?有点没看明白。谢谢 1、截取字符串中的一部分,用函数MID()。 A1="a12345y" 公式最外层是Mid()函数,该函数的格式是: Mid(文本,开始位置,长度) 对应公式是: MID(A1,MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),),MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))-MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),)+1) 2、长度=末位置-首位置+1。 其中MATCH()公式有不同的两个: 文本A1中第1个数字所在的位置:MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),) 文本A1中最后1个数字所在的位置:MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)) 两个公式不同之处,在于最后一个逗号。公式什么意思先别管,你只要知道: 长度=最后1个数字的位置-第1个数字的位置+1 本例中:6-2+1=5,数字长度为5。 3、拆散字符串。 下面公式取出字符串中的每一粒字符: MID(A1,1,1)="a" MID(A1,2,1)="1" …… MID(A1,6,1)="5" MID(A1,7,1)="y" 下面公式返回的是拆散后的一串字符(数组): MID(A1,{1;2;3;4;5;6;7},1)={"a";"1";"2";"3";"4";"5";"y"} 其中{1;2;3;4;5;6;7}用ROW(INDIRECT("1:"&LEN(A1)))计算所得。 这是数组公式中的一个基本技巧,如果还不懂,请从固顶的帖子中找到并学习它。 在编辑栏中,请用鼠标选取 MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1) 然后按F9可以看到上面的结果。 4、0乘以任何数都得0吗? 你一定不会怀疑,因为这是小学老师教的,小学老师是不会骗人的。 呵,不得不破坏一下小学老师的形象了。还是在编辑栏,请继续用鼠标选择: 0*{"a";"1";"2";"3";"4";"5";"y"},或者选择: 0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),按F9,结果显示为: {#VALUE!;0;0;0;0;0;#VALUE!}。真的不是“都得0”。 里面除了0,还有错误值。个数与原来数组元素的个数相同。 小学老师骗你了吗?没有,小学老师是不骗人的,0乘以任何数还是得0。 因为前后两个"a"和"y",根本不是数,所以返回#VALUE!。 0*{"a";"1";"2";"3";"4";"5";"y"}的目的使结果简单化,数字变0,字符变#VALUE!。 为什么这样做?请听下回分解。 5、Match()会告诉你,第1个0和最后一个0的位置。 第1个0的位置:Match(0,{#VALUE!;0;0;0;0;0;#VALUE!},0) 最后1个0的位置:Match(0,{#VALUE!;0;0;0;0;0;#VALUE!}) 如果不明白,请花点时间看一下关于MATCH()的帮助。 这个位置,其实也就是{"a";"1";"2";"3";"4";"5";"y"}中"1"和"5"的位置,也就是"a12345y"中1和5的位置。 现在再返回开头看公式: Mid(文本,开始位置,长度) 明白了吗? 关于拆解公式,请听听gouweicao78版主的话: http://club.excelhome.net/viewthread.php?tid=161588 对公式的一点补充:数字、字母混合组合的情况,本公式不适用,如:从"a123b45y"中提取123或45。 几个相关的帖子: 如何分离单位与数值
显示数组中相同的数 12310503这个数从前面去掉重复后是:12305
[此贴子已经被作者于2007-8-14 23:14:50编辑过] |