vba for循环跳出本次执行下一次_你不知道的VBA技巧用 For…Next 语句循环执行同一段代码...

0d4ce2fe38f7e4586a23c03310eca2ed.gif 1f3cac361d93f43440dc3ef33e8f855c.gif

让相同的代码重复执行多次

如果想在活动工作表前插入一张工作表,代码可以写为:

9343f5b98cf6256bb943b24cecb91bd6.png

如果想将这行代码重复执行 5 次,可以在过程中编写 5 行相同的代码,如:

fe15c0d4e9186eccc03e7a5e6d5a1663.png

前面说过,VBA代码就像录下来歌曲,执行代码就像播放歌曲,音乐可以循环播放,过程中的VBA代码也可以设置循环执行,For…Next语句就是设置代码循环执行的一种开关。

如果想让插入工作表的代码循环执行 5 次,可以将过程写为:

b5bb83be237f21df0694cb851f2a0404.png

执行这个过程的效果如图 4-12 所示。

d34a5f71f3d3eb36a18f53d26f14ffe7.png

 For…Next 语句是怎样工作的

执行过程后能在工作簿中插入 5 张新工作表,这是因为过程中的For…Next语句让代码“Worksheets.Add”重复执行了 5 次。

fa6255bc20a02bdfb040f5e4b412c211.png

VBA靠“For i = 1 To 5 Step 1”中的 3 个数字确定重复执行代码的次数。这行代码中的i是循环变量,数字 1、5、1 分别是循环变量的初值、终值和改变的步长值。每个For…Next语句都可以写成这样的结构:

accf9d1e35b2af1212f34ee4fb23d375.png

将For…Next语句的第一行代码写为“For i = 1 To 5 Step 1”,说明在执行过程时,VBA会让循环变量i的值从 1 增加到 5,每次增加 1(增加多少,由Step后的步长值确定)。因为从 1 到 5 共有 5 个数字,所以会执行 5 次循环体部分的代码,如图 4-13 所示。

44bd7b89c9b9021ed7acc025bab3b231.png

如果For…Next语句的第一行是“For i = 3 To 13 Step 2”,则VBA会执行循环体部分的代码 6 次,具体的执行流程如图 4-14 所示。

417c3344693ca8885be61eee60a72172.png

也可以将终值设置为小于初值的数,但此时应将步长值设置为负整数,如:

4d04ae51ef9a24b12b5be2e43fb8be1c.png

将代码写成这样,VBA每执行一次循环体,变量i就增加-1,直到小于终值 1 才终止执行For…Next语句。具体的执行流程如图 4-15 所示。

85c7afcf08472761b2d556da51478105.png

使用 Exit For 语句跳出 For…Next 循环

可以在循环体中任意位置加入Exit For来终止并跳出循环,如:

62bca3ad86dce70594ccaf5e41e86aed.png

无论For…Next语句设置执行循环体多少次,当执行Exit For语句后,VBA都会跳出For…Next循环,执行Next之后的代码,如图 4-16 所示。

8bd90a2780eac45842b206caa9f40671.png

For…Next语句总可以写成这样的结构:

d365148c35e79940035a216c2767ba6d.png

借助循环为多个成绩评定等次

dda0d12c4a977913b61f62a5f65557d3.png

如图 4-17 所示,如果要为B2 的成绩评定等次,可以用下面的过程:

35a94262a1574770b261dbb84ba6d6e8.png

可是,这样的过程只能处理一条记录,如果要处理的是图 4-18 所示的数据,应该怎么办呢?

9469445a6bbe8e605469647460f5110f.png 2bde5ac4a32b8edc08050c54695a6688.png

没错,思路正确。但你可能会将过程写成这样,如:

7573cb0018d2f37f81f0b99e03f857d8.png 4d0cb2d0534c6c1c445ebff82c712bdc.png

想知道评定等次的Select…Case语句有没有被执行 10 次,可以将光标定位到过程中的任意位置,连续执行【调试】→【逐语句】(或连续按键)观察过程的执行过程,如图4-20 所示。

9741a52ee0dc6887501c0c6d22e69ded.png

很显然,评定等次的Select…Case语句虽然执行了 10 次,但这 10 次都是处理相同的单元格,所以只为一个成绩评定了等次。

为什么会这样呢?看看Select…Case语句中用来对比的成绩和写入等次的单元格,应该就明白了。

7397686c3b966ece194711225998ccae.png

要解决这个问题,不仅要让Select…Case语句重复执行 10 次,还要让每次执行时,参与计算的单元格都不是固定的单元格:执行第 1 次,操作的是B2 和C2,执行第 2 次,操作的是B3 和C3……执行第 10 次,操作的是B11 和C11。这就需要用一个变量去代替Range("B2")和Range("C2")中的数字 2,让这个变量每执行一次就在原来的基础上增加 1,如:

ee78aa19cc6ad5c644333de712388d08.png

修改完成后,再次执行过程,就能得到如图 4-21

所示的结果了。

b542557fa5c34ed11a60cc897a98e529.png

在这个过程中,一共使用了两个变量:循环变量i和表示行号的变量Irow,其中i用来控制重复执行Select…Case语句的次数,Irow用来控制代码要处理的单元格。也可以用同一个变量来完成这两个任务,将代码写为:

6617b7bf7a153a4399cbbd45a4aff358.png

提示:变量是存储数据的容器。如果变量i中存储的数据是 2,那么代码"C" & i与"C" & 2 的效果

是相同的,返回的结果都是“C2”。

推荐阅读

北京大学出版社

《别怕,Excel VBA其实很简单(第3版)》

ac2af0f2021b061196b62d35f184a89f.png

一句顶一万句的“懒人心法”,教你一键搞定所有报表! 久经读者和市场检验的超级畅销书,升级!

*注:本文部分图片来源于互联网,仅供学习、交流使用。不具有任何商业用途,若有侵权, 请联系删除。   往期阅读   080b23eeca5ccd38652fc42b5f1c9f19.png 27f3b5ee12162b8f354f552331e05ca8.png 2b5addc1f214ac4305eb5ed612975fc2.png aa99bb2763bf07f85c7d0dadbb8d33c2.png点分享 b9a6055d815439aaa980fc22aecedeed.png点点赞 6933fc41de5c947fcf198e8fa1fe971a.png点在看
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值