大家好,今天继续来学习VBA中的循环。之前学习过的for循环比较适用于明确知道了循环次数的情况,比如知道要循环10次,就让fori等于1to10。有些时候碰到的情况是并不知道循环需要执行多少次,这个时候如果还要用for循环就会比较麻烦。
来看这样一个例子:1+2+3连续的自然数相加,求和第一次出现和超过1000的数字是多少?和是多少?如果用for循环来写应该怎么写?SUB一个for循环,先定一个变量i为整数,然后定一个isum也是整数。如果要for循环,fori等于1to,to多少?就给它一个比较大的数,比如到1000,肯定和会超过1000。

在循环的里面要进行怎么操作?首先要让和进行累加,所以isum应该等于isum累加上i。然后需要去判断isum会不会大于1000,需要用if去判断ifisum大于1000,if直接写上。如果isum大于1000,直接把i跟s打印出来,简单点直接去连一个分割符。
如果满足了isum大于1000,在if的判断里面必须再加上exit for,这个就表示当和达到了1000之后就退出了for循环。如果不加这句话就会一直打印了。
运行一下看,i是45,和是1035。如果把退出循环语句给删掉再循环,就会每一个i都打印出求和,并且求和已经超过了整数的范围,报错了,因此退出循环一定要加上。这个是通过for循环跟if语句去配合使用,来达到这种并不知道要循环多少次,通过条件判断来实现的效果。

今天要讲另外一个循环while循环,while循环就能通过条件去判断循环的次数。先看一下while循环的语句,这个是最基础的while循环的用法。while是一个关键词,后面加一个判断的条件,判断条件后面是不需要加then,是需要执行的循环指令。最后用whileand表示循环的结束。

如果用while循环应该如何去写?同样需要定义i和isum这两个变量,这里直接用长整形,然后循环while。循环的条件是isum小于1000或者小于等于1000,小于等于1000的时候,如果判断的条件成立就会执行while循环里面的语句,如果不成立就直接跳出了循环,最后用whileandwind结束。
循环的里面应该怎么操作?是不是也是等于isum加上i进行累加的求和?i首先要给它赋值,初始值是1,如果isum小于等于1000就会进行isum加i的累加,如果条件不成立就跳出循环,最后isum就会停在条件不满足的第一个位置,然后将它打印出来。

现在这么写代码是正确的吗?来试一下,输出出来是i等于1,isum是1001。为什么?因为在while循环里面i是不会自增的,不像for循环每次都会加一个步长。在while循环里面一定不要忘记让i去自增,i等于i加1,如果不自增很可能会出现死循环的情况,就是while循环的一直在运行无法跳出,Excel就会出现卡死的情况。
这样再来运行一下看,得到的结果是i等于45和等于1034。好像跟刚才的for循环有一点出入,这是为什么?来看这个语句执行的步骤。

首先i等于1,这个isum没有复值,它就是0。进入到这个循环里面之后,首先进行了i加1的操作,这个i就变成了2,因此这个1并没有求和,所以需要将i改成0。i等于0的时候,在循环里面第一次i就等于1,然后进行求和,再运行一下它,这样就没有问题了。
如果非要将i等于1,还可以这样去解决。将这两句对调一下,先将isum等于i求和,因此这个1会被加进来,然后再将i自增。这样还会出现一个问题,最后一个i变成了多1,因此在输出的时候需要将这个i再减1,这样再运行一下,这样就没有问题了。
这个while循环还有除了while循环以外,在VBA中还有这种do while循环、do until循环这几个循环,它们实现的效果基本是一致的。do while循环用do while判断的条件加一个loop,中间是循环的指令,这种方式跟while循环用法是一模一样的。

do while循环还有一种变体的结构,就是do然后loop while判断的条件。这两种的区别就是一个是先执行判断,再执行循环,另一个是先执行循环的指令,再进行判断。也就是说下面这种方式必定至少会循环一次,而上面这种循环可能不会执行。
除此之外还有do until循环,这个跟do while循环相类似,也有这两种情况,不同的是判断条件until表示直到某一个条件,也就是说这个判断条件如果它不满足就一直循环,而这个while循环是如果它满足就一直循环。
来看这个while循环,这里面是当isum小于等于1000的时候它是一直循环,如果用do until循环,直接复制一下来改一下,这里要用do until,这个时候条件就是isum大于1000了,一直循环到isum大于1000,然后loop结束,来进行一下,看这样是一模一样的。

最后留一个小作业,通过之前课程中学习过的内容去设计一个小程序,什么小程序?设计一个猜数字的小程序。这个游戏肯定都玩过,比如1-100以内的数字去猜,每猜一个数字程序给出的反馈结果是你猜大了还是猜小了,一直到你猜中这个数字为止,看看大家可以设计成什么样子。