vba 跳出for循环_VBA简单入门08:For循环

1、循环的作用和原理

作用:用来有效地重复执行相同或者相似的操作。Sub vv()

Dim i As Long

i = 0

i = i + 1

i = i + 1

i = i + 1

i = i + 1

i = i + 1

MsgBox i

End Sub

上面代码,每句 i=i+1执行后,i 都在原来的基础上加上 1。因此最后 i=5。

显然,i=i+1这5句代码都是重复的操作。假如要执行 【 i=i+1】 100次、1000次,那代码得需要写多长?

于是,就有了循环。For循环是一个结构,For开始,Next结尾。Dim i As Long

Dim x As Long '循环次数

i = 0

For x = 1 To 5

i = i + 1

Next

如上面的代码,For x = 1 To 5 表示循环是从1-5执行5次,表示执行了5次 i=i+1 这样的操作。

For循环的原理:For循环实际上是内置了一个看不到的计数器,当x=1时,执行 i=i+1 完毕后,Next会自动进入下一次循环(内置计数器计数记录),下一次 x=2 ,执行 i=i+1 完毕后,再下一次 x=3.....如此循环重复,直到循环结束,就是x=6(超过5)的时候结束。如下面的gif图。

135872882_1_20180615095354363

2、For循环的步长。

步长就是我们军训排队时,教官号令报数,单数出列。单数1、3、5、7.....之间都相差 2,这就是步长。

如,现在我们要在A1:A10单元格区域,依次选择单数A1、A3、A5......A9。步长是使用要在For语句后面写上

Step 步长值。Dim i As Long

For i = 1 To 10 Step 2 '步长为2

Cells(i, 1).Select

Next

135872882_2_20180615095354535

上面代码 i 的值变化依次是1、3、5、7、9。

实际上 For x = 1 To 5 是省略了步长 Step 1 的,默认步长是1的情况下可省略。

3、For循环的方向

一般循环的方向是从上到下的,但也可以从下到上。VBA删除行就是一个典型的例子。

下面例子,删除A1:A12中空单元格所在的行。

135872882_3_20180615095354691

如果需要从下到上循环,注意两点:

1、For i = 12 To 1 而不是 For i = 1 To 12

2、Step -1声明方向,不可以省略。-1 是反方向的步长值,可以更改,但必须负整数。Sub gggg()

Dim i As Long

For i = 12 To 1 Step -1 '注意方向

If Range("a" & i) = "" Then

Range("a" & i).EntireRow.Delete '删除整行

End If

Next

End Sub

4、循环的嵌套

正如 if结构可以嵌套,循环也可以。下面例子用两个循环,一次填充数字1-10。

135872882_4_20180615095354816

该代码,先开始执行外循环(不执行完,一次一次来),然后执行完内循环(执行完5次),再进入下一次外循环,重复执行内循环.....

135872882_5_2018061509535597

5、退出For循环

下面例子,H1:H6有6个姓名。我们需要在其中寻找“小乔”,一般情况下,找到小乔了,我们就会停止寻找动作,是不是?所以这里的循环次数并不是6次,而是4次,我们找到小乔后提前退出了。

if结构常常用来配合退出循环。退出循环的语句是Exit For。

135872882_6_20180615095355332Dim i As Long

For i = 1 To 6

If Cells(i, "h") = "小乔" Then

Cells(i, "h").Interior.ColorIndex = 3 '设置背景颜色

Exit For '退出循环

End If

Next

135872882_7_20180615095355394

李白和百里玄策不管啦!

6、另一个For循环:For each.....Next

For each.....Next循环常常用来遍历集合对象。Dim Sht As Worksheet

For Each Sht In Worksheets

Debug.Print Sht.Name

Next

代码遍历工作表集合,依次打印工作簿中每个工作表的名称。

135872882_8_20180615095355488

【小结】

这是简单系列的第8篇文章,现在开始我们的VBA编程之旅了。

在现学到的知识范围内,我们可以尝试解决3个实际问题。

VBA其实真的很简单!

例子1:高级筛选

135872882_9_20180615095355566

代码如下,仅供参考:Sub bb()

Range("a1:c1").Copy Range("j1") '复制标题

k = 1 '记录行号

For i = 2 To 13 '循环遍历数据

'如果部门是A且销售额大于等于1500

If Cells(i, 1) = "A" And Cells(i, 3) >= 1500 Then

k = k + 1 '计数,辅助输出数据到 j 列的单元格区域

'表格整行数据复制到 j 列相应单元格

Range(Cells(i, 1), Cells(i, 3)).Copy Cells(k, "j")

End If

Next

End Sub

135872882_10_20180615095355660

筛选结果

例子2:简易工资条制作

135872882_11_20180615095355769

参考代码:Sub vvvv()

Dim i As Long

Dim k As Long

k = 1 '行号计数

Range("j1:n100").Clear '清楚内容,方便更新数据

For i = 2 To 7 '遍历工资表

Range("a1:e1").Copy Cells(k, "j") '标题

Range(Cells(i, 1), Cells(i, 5)).Copy Cells(k + 1, "j") '复制工资数据

k = k + 3 '工资条间隔

Next

End Sub

例子3:复杂一点的高级筛选(循环嵌套)

135872882_12_20180615095355863

要求:提取部门为A且销售额大于等于1500的数据+部门为C且销售额大于等于3000的数据。

参考代码:Sub bb()

Range("a1:c1").Copy Range("j1") '复制标题

k = 1 '记录行号

For x = 2 To 3 '遍历筛选条件要求的部门

'//先提取A部门符合要求的数据,再提取C部门符合要求的数据

For y = 2 To 13 '循环遍历表格数据

'Cells(x, "f") 为筛选条件的部门,Cells(x, "g")为筛选条件的销售额

If Cells(y, 1) = Cells(x, "f") And Cells(y, 3) >= Cells(x, "g") Then

k = k + 1 '计数,辅助输出数据到 j 列的单元格区域

'表格整行数据复制到 j 列相应单元格

Range(Cells(y, 1), Cells(y, 3)).Copy Cells(k, "j")

End If

Next

Next

End Sub

135872882_13_20180615095355941

结果

希望大家可以愉快的入门VBA!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值