循环是程序设计中的基本结构或流程之一。这里说的“流程”,就是一个程序中各行代码的执行顺序。
在默认情况下,我们编写的 VBA 程序都属于顺序结构,其执行流程就是:各行代码按照由上至下的顺序依次执行,并且每行代码只执行一次。而循环结构(英文称为Repeat 或 Loop)则允许把程序中的某几行代码反复执行多次,直到满足要求为止。这在处理大批量数据时显得尤为有用,比如案例3-1中的情况。
案例3-1: 在图3.1所示的工作表中存有三位同学的单科考试成绩。要求编写一个VBA程序,单击“计算成绩”按钮后能够计算出每个人的总分与平均分,并分别写入F列和G列单元格中。
图3.1 案例3-1数据示例
在不使用循环结构的情况下,也可以编写程序解决案例3-1的需求,只不过会大量重复地书写相同语句,十分烦琐。
如果真的这样书写代码,相信很多读者都会使用复制和粘贴功能——先写出第1行和第2行代码,然后进行复制操作,最后把复制的代码中的数字换成对应的数字。如果稍有疏忽漏改某处,就会导致错误的运行结果。
还有稍微简单一点的办法,比如增加一个表示行号的变量 i,得到下面的代码:
这段改进的代码虽然比前面的代码多了几行,也需要把第2行到第4行的代码复制两次,但是每次复制后只需把 i=3 修改为 i=4 或 i=5 即可,这也是上一章讲到的“把相同的东西抽取出来”的优点之一。
即便如此,这个程序也很繁冗,而且假如表中的数据不是3行而是100行,那工作量就非常大了。怎样解决这个重复的问题呢?这时循环结构就有了用武之地。比如使用变量 i 代表行号的这段程序,其实可以改用下面的流程来实现(注意这只是流程说明,并不是可以运行的真实代码)。
如果能够按照上面的模式书写程序,哪怕有1万名学生的数据,也只需要把“重复3次”改为“重复10000次”、把“i的取值分别为3、4、5”改写为“i的取值分别为3到10002之间的每个数字”即可。
怎样把“重复3次”使用VBA语言表示出来呢?最简单的办法就是使用For…Next循环语句。