所谓循环控制,即在循环执行一段代码,用于完成一些重复性任务。 VBA中的循环控制语句主要有3种:for、while、loop。对于大多数人来说,for的使用频率最高,而我个人也觉得for是最为灵活的,在很多场合下都可以使用,相较while和loop,其逻辑也再加清晰,更便于对循环进行控制。 1. For循环for循环有两种形式,一种为明确地知道要循环的次数的,比如从1到10循环执行10次;另一种则用于循环历遍某个集合对象,这个对象有多少个单位就循环执行多少次,可以视为是未知循环次数的。 ① 循环次数已知的for其格式如下:
通常我们会需要对Excel表格中的每一行(或每一列)进行循环历遍,对其中单元格的值进行各种操作。这时候,就可以先求出该工作表中有多少行(或列),然后再逐行(列)进行判断。这个操作单元格的示例会在后面有专门的章节来讲解演示,这里就只讲循环语句本身了。 示例如下:
以上代码将会依然输出1到10这10个数字 在这种形式的For里面,还可以在[结束值]后面加上Step,然后跟着写上步长,如果省略,则默认步长为1。像上例,默认是把i从1递增到10,即:1、2、3、4、5、6、7、8、9、10这样依次递增的。如果像下面这样写,把步长设置为2,则变成了:1、3、5、7、9。则循环体(即For里面的代码)只会执行5次。
输出:1 3 5 7 9 ② 循环次数不确定的For格式如下:
结合之前讲过的数组来举个例子。假设已有数组myArr并且已赋值,则可以用以下代码历遍它的每个值:
这样就不管这个数组包含有多少个元素,都可以逐个历遍。 2. Loop循环Loop循环或许把它称为Do...Loop循环会更加合适。因为它的格式是先Do再Loop的。但我喜欢把它叫Loop循环。 Loop循环也有两种形式。第一种是先判断循环条件再开执行,第二种先执行一次然后再判断循环条件是否成立。 ① 先判断再执行格式如下:
这里的 Do While ... Loop
上例的输出结果是:5 4 3 2 1 Do Until ... Loop
上例的输出结果是:5 4 3 2 1 0 逻辑还是很简单的,大家可以稍微分析下为什么用While时输出到1就停止了,而用Until时后面会多出个0,而如果需要不让它输出0程序应该怎么改写。搞清楚原因,这个While和Until的区别也就知道了,Loop循环应该也就掌握了。 ② 先执行再判断先执行再判断,即将条件判断语句放到Loop的后面,先Do一次,然后再Loop While或者Loop Until。 格式如下:
示例如下: Do ... Loop While
输出结果为:5 4 3 2 1 Do ... Loop Until
输出结果为:5 4 3 2 1 0 Loop循环总结:可以看到,无论是采用哪种形式的Loop循环,都可以得到相同的结果,实现同样的功能,而具体使用哪一种,纯粹是个人习惯(个人喜欢)。但无论使用哪一种,都一定一定要记得,必须要有能使循环结束的语句出现在循环中(例如前面例子中的i=i-1),否则程序会永远不停地执行下去。这时候除了在任务管理器中结束Excel外,就没有什么更好的办法了。 3. While循环While循环有点类似于Loop循环,先判断条件是否成立,再开始(或结束)循环。而我看过的教程里面,有些是没有讲到While循环的。可能是作者觉得没有必要讲了。 While循环的格式如下:
示例如下:
输出结果为:5 4 3 2 1 同样要记住的是,必须要有使循环能够结束的条件,否则程序会进入死循环中。 由以上示例可以看出,这3种循环语句,是有着某些共同之处的,特别是Loop和While循环。而事实上很多循环事件,用3者都能实现。具体使用哪一种,则或根据实际情况和使用习惯来选择。但相信对于大多数人来说,都会优先考虑使用For循环,因为它的条理更加清晰,流程控制更简易,适用的场景更广,语句也更简练(至少它不需要显式添加使循环结束的语句) 本系列教程其它文章 Excel VBA 入门(零) |
|