ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 胡剑0227

[讨论] 有志于用活循环迭代公式的不要错过

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-9-16 22:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
太深奥啦,好像都是跟数学有关的。研究下。。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-17 08:21 | 显示全部楼层
呵呵,需要点空间想象力,有点不可言传的感觉。希望大家有所收获。

TA的精华主题

TA的得分主题

发表于 2009-9-17 22:07 | 显示全部楼层
原帖由 华中人士 于 2009-9-16 22:27 发表
太深奥啦,好像都是跟数学有关的。研究下。。。。


跟数学没有什么关系,也没有什么深奥的东西。

【举例】你的手上,有1块钱,我再给你的手上放1个1块钱的硬币,那么你的手上就有2个硬币,再重复一次,就有3个硬币……
【引申】你的手就是单元格A1,A1的初始值=1块钱;我给你每次放的硬币是1,而最终的结果还是在你的手上——也就是A1单元格上,那么,经过1次这样的操作,你的手上(A1单元格)就有2个硬币,经过2次操作就有2+1=3个硬币……

也就是说:循环引用的原理就是始终在用这个“A1单元格”的最后的值作为下一次计算的“初始值”,并按照我们给定的计算方法(每次放1个硬币),得到经过n次迭代之后的最终值。

“迭代”二字就是重复。


至于其它例子,也可这么认为,比如提取数字:
你的手上,有“1我2你3他”一串字符,一个字一个字的MID取出来,判断是否数字,不是数字就替换为空文本(咔嚓掉),那么:
第一次就是“1”→保留,得到"1"
第二次就是“我”→咔嚓,得到"",并且使用第一次的结果作为初始值与第二次的结果合并="1"&""→得到"1"
第三次就是“2”→保留,得到"2",并且使用第二次的结果作为初始值与第三次的结果合并="1"&"2"→得到"12"
……

也就是说:原理就是始终在用这个“A1单元格”的最后的值作为下一次计算的“初始值”,并按照我们给定的计算方法(每次提取1个字符,并判断,替换),得到经过n次迭代之后的最终值。

而最关键的问题——在于构建这个计算方法
至于理解的难点——在于与普通的Excel公式不同的是,循环引用公式中,需要用到的值是公式自身得到的结果,而其它普通公式,都是类似于在B1用公式,用到的值来自与B1无关的A1。


百度或者在论坛搜【循环引用】,可以找到许多应用案例。
轻松控制循环引用完全教程

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-17 22:28 | 显示全部楼层
精彩!
循环迭代有自己的一些小窍门,把这专属的部分吃透后,能走多远还是看函数公式的熟练程度...尤其数组公式,此外又是功夫在Excel外了模型设计了,呵呵。

循环,除了循环部分,还可以在判断上下功夫,循环是工具,判断得到的往往是目的,让公式更具智能性,呵呵。

就是思想上要有个转变,呵呵

TA的精华主题

TA的得分主题

发表于 2009-9-17 22:28 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-17 22:30 | 显示全部楼层
原帖由 小摇约定 于 2009-9-17 22:28 发表
看明白,我第一次看到


强,第一次看就看明白了,呵呵

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-18 10:01 | 显示全部楼层
40楼 循环因子解析。

在写循环公式的时候,如果能建立 初始态、循环态、稳定态 那么思路上就会清晰很多。当多个单元格之间互相制约时更加重要。当然并不是每个公式都需要具备这个三个状态。根据情况灵活应用吧。

本题公式执行时 开始 反馈 -1,然后再1-4之间循环,并且以后不再出现 -1。所以可以区分出初始态。根据这个初始态,其他相关单元格可以完成 初始态 的配置,为进入 循环态 做好准备。这样各个单元格之间的 节拍 就很好的得到了统一。

[ 本帖最后由 胡剑0227 于 2009-9-18 13:23 编辑 ]
有初始态的1-4循环.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-18 13:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 zhaozyuan 于 2009-9-11 17:16 发表
=IF(A1<1,1,IF(A1<100,A1+1,A1))
=IF(A1>0,A1+A2,0)
迭代100次



再拿13楼zhao兄的答案说事吧(不要砸我呀,呵呵)
由于没有考虑初始态,导致无论如何启动公式 都无法调整到两个单元格都是1,1状态,或者说更初始的 累加和为 0的状态。
通过考虑初始态,可以很轻松的为整个相关单元格公式找到初始态

[ 本帖最后由 胡剑0227 于 2009-9-18 13:40 编辑 ]
无法调到起始两个单元格都是1的状态.gif
考虑了初始态的状况.gif

TA的精华主题

TA的得分主题

发表于 2009-9-18 13:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 胡剑0227 于 2009-9-16 21:03 发表
在上面的基础上应该可以尝试实现这个效果了:
使用了SUBSTITUTE

目标只要提取对应的数字就可以了


提取文本的函数没有用过,临时学习了两天,现学现卖,效果好像实现了,不过实现的方法很笨,胡兄多指教!
B2=IF(B2="",,B2+1)
C2=IF(ISNUMBER(-MID(A2,B2,1)),C2,SUBSTITUTE(IF(B2=1,A2,C2),MID(A2,B2,1),""))
提取数字.gif


==============================================================================
嗯,厉害。要用好循环迭代,是需要函数公式基础的。不过反过来,学循环迭代,也可以顺便学点函数公式,呵呵

[ 本帖最后由 胡剑0227 于 2009-9-18 15:45 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 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 编辑 ]

考虑初始态的提取数字的方法.rar

6.78 KB, 下载次数: 67

考虑初始态的提取数字公式2003版.rar

3.53 KB, 下载次数: 41

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-28 04:13 , Processed in 0.036689 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表