ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-18 15:19 | 显示全部楼层
循环迭代解析二:
1.细节:循环迭代公式中对本单元格初始态判断时,需要使用 A1=0 而不能使用 A1="" (假设当前本单元格为A1)
2.结构:建立初始态、循环态、稳定态的概念。虽然不是每个公式都需要完备的这三个状态。
        找到本源单元格,一般是一个 循环因子 ,为其建立一个初始态,其他单元格根据这个初始态进行 初始化配置。随后进入循环态,让初始态和循环态清晰地分离开来。
        稳定态,用于锁定状态,如果本单元格已实现目标,就锁定本状态。
        思想是关键,根据某一个特性进行判断,定为 初始态 或 稳定态,具体什么特性,用什么公式 都是 幻影。[ /size]


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

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-18 21:31 | 显示全部楼层
提取数字升级:
里面用了更多的判决,就是处理部分,这部分主要考研逻辑层次和函数公式功力了。
不属于循环迭代的书写技巧了。
逻辑清楚以后,就是一个接一个的套IF就是了,呵呵。

有兴趣可以实现一下,不过函数公式初级的同学不用太勉强,本帖主要讨论 循环迭代 本身的特点技巧。练习函数功力可以看其他的对应帖子。

==========================================================================================
以上的循环可以称为小循环,一般 循环因子 可以由一个单元格担当,甚至不用循环因子。多个单元格联合作战,成为一组循环因子,可以有大用。不过自己应用的还不透,尽量把自己知道的来个抛砖引玉,呵呵。有空继续....

[ 本帖最后由 胡剑0227 于 2009-9-18 21:39 编辑 ]
提取数字升级.gif

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

11.01 KB, 下载次数: 67

TA的精华主题

TA的得分主题

发表于 2009-9-19 00:05 | 显示全部楼层
从本帖标题出发点看,是要解决问题,而不是要绕弯路。与其费心思去算B2=-1构造特殊情况,不如由用户来决定什么时候开始运行。
启动开关不仅可以做到这一点,还可以轻松给迭代变量赋予初始值,而不需一次次进入公式的编辑状态来重新赋值。
而计数器的作用,经常作为MID遍历字符串中每一个字符、遍历单元格区域中每一个单元格等,


按照《轻松控制循环引用完全教程》的做法,不需要这么麻烦,步骤如下:
1、设置D1单元格为启动开关,输入1启动,清除时关闭。
2、以B2为计数器,输入简单公式:=IF(D1,B2+1,)——即D1启动后从1开始累加,否则归零。
3、C2输入下面普通公式提取数字(或参考用公式将混合数字和字母的分开
=IF(D1,C2&IF(ISERR(-MID(A2,B2,1)),"",MID(A2,B2,1)),"")——普通公式,即当D1未启动时返回""作为初始值,启动后,则返回C2的结果与IF的合并。IF只需判断所取出的A2单元格中的单个字符是否为数字,非数字就返回""空文本,数字就保留。
得到结果就是提取数字。

4、C3输入数组公式
=IF(D1,C3&IF(ISERR(-MID(A2,B2,1)),"",MID(A2,B2,1)&IF(ISERR(-MID(A2,B2+1,1))*(B2<MATCH(1,0/MID(A2,ROW($1:$99),1))),"*","")),"")
在前者基础上,保留数字的同时——判断下一位不是数字且其位置不会超过A2最后一个数字(MATCH的结果),则再加*号。

【循环引用】提取数字+符号间隔数字.rar

4 KB, 下载次数: 56

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-19 10:27 | 显示全部楼层
现在可能没有完全吃透,我想 把 本初单元格 先变成 -1 作为相关单元格的 初始标志 也只是一个 幻影,一个具体实现方式,从思想上就是要建立一个 初始或启动的 概念,以统一各单元格步调。
启动开关 似乎差不多也是这样的一个功能,也是一个具体的实现方式吧。

我想思想上应该是一样的,启动开关 可以是1或清除,也可以是一个更复杂的判断,只是具体实现不同吧,呵呵。

我以自己的思路来写的,方式可能比较旁门吧,呵呵。关键是思想,具体实现我想可以灵活的,呵呵。

==================================================================================
当然,我想直接使用一个辅助单元格来控制的话,确实处理上会更简单,呵呵。

[ 本帖最后由 胡剑0227 于 2009-9-19 10:56 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-19 10:47 | 显示全部楼层
下面大家可以再尝试实现一下顶楼的情况,可以看做是一个动态的 二进制数 累加情况,当然如果从另一个角度来看,就更容易想到它的作用。不过计算速度有效,直接使用时有点作用范围受限,需要调整策略:

在尝试实现时,先记下下面的话,我想做出来以后你会更真切的听到Excel的心跳的,呵呵。

计算脉冲的分配顺序是从 上到下,从左到右,Z 字型分配的,因此A2单元格中引用的A1值,是A1值经历了本轮脉冲计算后得到的新值。

这一点是在 循环迭代 中需要注意的...
具体应用又是丰富多样的...


===========================================================================================
附件不含公式,含公式的附件过些楼层提供,是考虑到看了答案就不能有刻骨铭心的感觉了。有一个磨砺的过程会比较深刻,需要时会从潜意识中蹦出来

[ 本帖最后由 胡剑0227 于 2009-9-20 07:22 编辑 ]
二进制自增.gif
二进制自增斜.gif

循环精灵-解析2003.rar

13.16 KB, 下载次数: 34

循环精灵-解析2007.rar

10.01 KB, 下载次数: 42

TA的精华主题

TA的得分主题

发表于 2009-9-19 22:30 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-20 06:58 | 显示全部楼层
呵呵,不是吧...
十进制知道吧, ,逢9进位。
于是数数就是0,1,2,3,4,5,6,7,8,9;
            10,11,12,13,14,15,16,17,18,19
二进制就是逢1进位。
数数就是,0,1,10,11,100,101,110,111,1000...即可看成二进制数数,也可以看成0和1的各种组合状态 穷举。


意图:55楼的实现尝试,希望让大家对计算脉冲的分配顺序所带来的影响有一个刻骨铭心的感觉。

[ 本帖最后由 胡剑0227 于 2009-9-20 07:02 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-21 08:51 | 显示全部楼层
突出重点,大家可以先指考虑 三位数字,方向上选择 从上到下 和 从下到上 两种 好了。

TA的精华主题

TA的得分主题

发表于 2009-9-21 09:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

回复 55楼 胡剑0227 的帖子

起动开关放在C2? 这样对于A1首次更新有影响的吧,增加难度?不过好像动画示例里面就是直接从00000010开始的

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-9-21 10:19 | 显示全部楼层
哦,不是的。你可以使用其他启动方式,都一样。
因为原本的那个先转化为-1,然后再启动的方式,在本例由于需要 0,1 之间转换所以 通用性有点限制(如果把0-1转换,变成1-2转换当然也可也以,以后应用时就-1就完全等同了,不过这里简化吧,而且直接0-1好理解些)

在C2做启动,是用来简化的,呵呵。至于一开始就跳到 01,我到没有注意,我看看...

不用理会这个,主要把关键的 二进制 动态增长表达就可以了。因为这个是多单元格之间的循环,里面需要注意些东西。能体会到 脉冲分配 顺序就可以了。因为 高位 地位 顺序不同 各个单元格的判决方式是不同的,能体会到这个就达到目的了。

自己当时觉得这一点有时会忽视,虽然 脉冲分配 顺序是知道的,但还是没体会到带来的影响。

=================================================================================
状态是从0开始的,录制时太快了,开始几个节拍有点快。那个C2当启动是为了简化处理。

[ 本帖最后由 胡剑0227 于 2009-9-21 21:19 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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