让For多层循环嵌套永远不再困扰新手

[原创][本菜小体会]让For多层循环嵌套永远不再困扰新手

小体会题目:让For多层循环嵌套永远不再困扰新手

小体会关键词:多个循环嵌套形如一个小闹钟

问题的重要性:对于像本菜一样的鸟儿们,在刚开始接触一个vba程序中复杂的for多循环嵌套时(比如包含多变量的多维数组程序),一定对程序是怎样执行循环每一个详细步骤感到非常困惑,没有头绪。而不知道每个循环的正确执行步骤,就难以真正看懂程序的运行全过程,在编程时也就很可能不懂得合理安排每个变量出现的位置以及某变量应该在什么时候出现、其中某个循环应当放在哪个地方,因此怎样深入理解For的多循环嵌方套法具有很重要的意义。

小体会中心内容:当一个程序中出现嵌套多个For循环体时,请看本例程序共有三个简单的For循环体:

Sub xunhuai()
Dim a1%, a2%, a3%
    For a1 = 1 To 3

        For a2 = 2 To 4
          For a3 = 1 To 3
            Cells(a1, a2) = a1 * a2 * a3
          Next a3
        Next a2
    Next a1
End Sub
当本例程序开始运行时,首先执行For a1 = 1 To 3,程序将1 to 3中的第一个元素值1赋给a1;然后执行for a2=2 To 4,程序将2 to 4中的第一个元素值2赋给a2;接着执行for a3 = 1 To 3,程序将1 to 3中的三个元素值1,2,3全部分别遍历一次,分别赋给a3变量的值为1、2、3;接着又执行for a2=2 To 4的第二个变量的元素值3,这样依次循环,Cells(a1, a2) = a1 * a2 * a3语句得到相应的单元格的值。
判断cells(a1,a2)最终将产生几个单元格的值的方法是:a1从1 to 3共有3个变量值,说明cells(a1,a2)的最后结果是3行;a2从2 to 4共有3个变量元素值,说明cells(a1,a2)的最后结果是3列,总而言之,cells(a1,a2)最终将产生共有几个单元格被赋值的公式是:a1*a2(本例3*3=9个单元格);其中最终显示结果的单元格的行数等于a1,列数等于a2(本例是3行3列)。例如,cells(x,y),假设x=1 to 500;y=2 to 200;则cells(x,y)最终将被赋值的单元格个数共有500*199=99500个;其中cells(x,y)的最终显示有数据的结果共有500行199列。
小体会小结:多个For循环形如一个小闹钟,小闹钟的运行规律是:当秒针走完60次后,分针自动增加1,这时时针不变;当秒针又走完60次,分针又增加1,此时时针还是不变;只有当秒针不断地运行,而且分针也走完60时,时针才增加1。这跟for循环嵌套是同一道理。 哈哈!记住了小闹钟,还有可能忘记多层循环吗!


 小体会试验方法是:进入VBE代码编辑界面(可按alt+F11组合键),连续按F8键,逐语句执行代码,看光标来回徘徊情形;同时将鼠标依次移放到各个变量a1、a2、a3,观察该变量的当前值,同时观察sheet1单元格发生了什么变化,就能够很清楚地知道当前中心语句Cells(a1, a2) = a1 * a2 * a3的当前值是多少。
最后说明:小体会意味着是个人的理解,既然是个人理解,肯定存在偏差,既然有偏差,必然诚恳希望老师纠正;但我自信地说一句,对于For循环嵌套还比较模糊的坛友,肯定会按照小闹钟的原理,对For循环嵌套终身难忘。

小体会题外话:有时候一个程序的一个小疑点,很有可能困惑入门者几天或者几十天的时间,我始终相信每个坛友的个人体会是最宝贵的财富资源,我之所以大胆把自己的一点小体会拿出来献丑,目的就是让更多更好的体会在本论坛纷纷亮相,使菜鸟们颇受益处。

 
展开阅读全文

没有更多推荐了,返回首页