|
楼主 |
发表于 2009-9-18 14:12
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
回复 49楼 sunbin200388 的帖子
功能上是实现了,但有些细节需要讨论一下,另外还可以修改公式得到更具可控性的公式。
待续...
循环因子部分,你使用了无限增长,呵呵,这个是好主意,也算是一种循环吧,就是循环周期无穷大,呵呵。类似直线和圆的概念,当圆的直径无限大时圆就是直线了,呵呵(扯远了点)
但既然是无限循环,可以简化公式:=IF(B2="",,B2+1),成=B2+1算了。当然关键不是指你画蛇添足了,而是对 B2="",应用时理解有误。B2永远不曾""过,这个是我上面有个帖子中提到的一个细节。你可以试试改成 :=IF(B2="",100,B2+1)测试一下,他不会跳到100去;你:=IF(B2=0,100,B2+1),他一下就到100了,所以本初状态为 0 不为 ""。
就是说 循环迭代 引用时 本单元格初始状态不能用 ""来描述,可以用 0 来描述,这个问题我也是困惑的好久,测试得到的,呵呵。
猜想...验证,我觉得这是个学习的好方法,呵呵
这个是细节部分...
======================================一条美丽的分割线=====================================
在公式可控性上有欠缺,比如一启动开始的一个 规 字就被吃掉了,感觉不到初始态,就象那个 “预备”没有就直接起跑了,呵呵。
这里就是上面提到了要 考虑初始态...
由于这两个单元格,C2单元格引用了B2,因此B2是 根源...抓住源头,在源头上分离一个 初始态 出来,利用这个初始态 为各个后续联动单元格配置 初始态会更好。待续
待续》。。
从你C2单元格的公式:=IF(ISNUMBER(-MID(A2,B2,1)),C2,SUBSTITUTE(IF(B2=1,A2,C2),MID(A2,B2,1),""))
你是把 B2=1 当成初始态,完成将 A2 单元格的值 移入本单元格的功能(初始化),并且已经开始了 SUBSTITEUTE进行实际运算了。这样紧凑、巧妙没错,但逻辑上有点急促...
最好能把 初始化 的部分首先完成,然后再进入循环态...这里反正你无限循环,稳定态反正不用考虑了,呵呵。
所以可以参照上面 的 具有初始态控制的 1-4 循环来改造 循环因子。为B2其配置一个 初始态,值为 -1 ,C2单元格根据 B2=-1 这个指示 进行初始化配置,然后进入循环体就会有更好的控制性。
修改公式为:B2=IF(B2=0,-1,IF(B2=-1,1,B2+1))
C2=IF(B2=-1,A2,IF(ISNUMBER(-MID(A2,B2,1)),C2,SUBSTITUTE(C2,MID(A2,B2,1),"")))
核心的处理环节并没有修改,在思维结构上做了些微调,这些是 循环迭代 的技巧,具体处理部分就看 函数公式(有其数组公式) 功力了。
=======================================================================================
忘了上一个2003版的了,补上,自己习惯用2007的了,因为比较漂亮,呵呵
[ 本帖最后由 胡剑0227 于 2009-9-18 20:54 编辑 ] |
|