虽然用2007做出一个260个字符左右的答案,结果也完全正确。但是……结果嵌套过多,2003版通不过!厚着脸占个位,方便学习和向版主请教!
可以吗?
……………………………………………………………………………………
昨晚终于在2003模式中写出一个符合要求和结果的公式(字符:290个左右)!好高兴!虽然字符多了点,但是,相对于我这样的新手来讲,能完成如此难度的题目也算不小的进步了!要感谢版主提供了这样的好题目!
先占位吧,等版主回答了我的问题再发邮件!
……………………………………………………………………………………
邮件已发,请版主查收!
答案(286个字符):
=SUM(TEXT(TEXT(REPLACE(0&TEXT(MID(A1&"CC",ROW($1:$100),COLUMN(A1:P1)),),LEN(0&TEXT(MID(A1&"CC",ROW($1:$100),COLUMN(A1:P1)),)),1,""),"[<="&10^13&"]0.00;!0;!0;!0"),"[>=10]0.00;!0")*ISERR(-MID("C"&A1,ROW($1:$100),1))*ISNUMBER(-MID("C"&A1,ROW($2:$101),1))*(MID("C"&A1,ROW($1:$100),1)<>"."))
公式的主要思路是用TEXT(...,)确定字符串中必须有文本,用LEN()求得含文本的数字串的长度,也就是去除纯数字以后的包含数字串文本长度,用REPLACE去除数字串后面的文本,再用TEXT(,"[<="&10^13&"]0.00;!0;!0;!0")去除>10^13的数,并除去前面文本的数字串,这样留下来的数字串还多一些首部非文本开始的数字串,所以再用*ISERR(-MID("C"&A1,ROW($1:$100),1))去除,而.也会当成文本所以再用(MID("C"&A1,ROW($1:$100),1)<>"."). 这2个条件可以用常规方法&0(其实还有更简单的方法,常见总结)后一次去除即*ISERR(-(MID("C"&A1,ROW($1:$100),1)&0),这样公式变为:
=SUM(TEXT(TEXT(REPLACE(0&TEXT(MID(A1&"CC",ROW($1:$100),COLUMN(A:P)),),LEN(0&TEXT(MID(A1&"CC",ROW($1:$100),COLUMN(A1:P1)),)),1,""),"[<="&10^13&"]0.00;!0;!0;!0"),"[>=10]0.00;!0")*ISERR(-(MID("C"&A1,ROW($1:$100),1)&0)))
如果用TEXT的双判断则为189个字符:
=SUM(TEXT(REPLACE(0&TEXT(MID(A1&"CC",ROW($1:$100),COLUMN(A:P)),),LEN(0&TEXT(MID(A1&"CC",ROW($1:$100),COLUMN(A:P)),)),1,""),"[>1e13]!0;[<10]!0;0%;!0")*ISERR(-(MID("C"&A1,ROW($1:$100),1)&0)))
由于没有考虑到TEXT可以使用2个条件判断的技巧,所以需要2次判断,这样嵌套就可能会增加,因此公式采用了较多并联判断. 这也造成公式较长, 一半来说串联判断比并联容易少字符,这是优点,缺点是容易受到嵌套限制.
不改变思路可以优化的细节有:
COLUMN(A1:P1)改成COLUMN(A:P),可以简化4个字符.
*ISNUMBER(-MID("C"&A1,ROW($2:$101),1)) 应该不需要了,因为前面TEXT(...,)已经确定数字后面一定有文本.
答案正确, 评2分.
[ 本帖最后由 willin2000 于 2008-12-25 10:05 编辑 ] |