VBA实战入门教程(三):循环语句
作者:E图表述来源:部落窝教育发布时间:2020-05-20 15:26:52点击:5902
编按:
哈喽,大家好!今天是第三篇VBA实战入门教程,我们将给大家带来VBA中最常见语句之一,循环语句。典型的循环语句有4种,分别是Do While…Loop循环、Do…Loop Until循环、For…Next循环、For Each x In y … Next循环。查看循环逻辑图可以更快理解循环语句。
【前言】
在看过我们前两篇的VBA实战入门教程后,有没有兴趣继续学习呢?也许同学们的兴趣早就有了,但就是还没有找到入门的路,当然了前面的两篇文章也算不得是让你入门的途径,充其量也就是一道“开胃菜”。继续跟上作者E图表述的步伐,我不会让你像“哑巴英语”似的,变成只会看不会写的“手残VBA”。那如果前两篇的文章让你了解了一些单元格对象的属性,那现阶段,你就需要了解写代码中不可规避、而又十分重要的两个“语句”!
一、循环语句
1.给一个单元格的赋值
在前面的文章中,同学们应该抓住了一个知识点,就是对单元格的赋值过程。什么是赋值呢?就是将一个表达式的结果,输入到某一个(某一个区域)单元格对象的VALUE属性中,例如下面的写法:
Sub 赋值1()
Sheets("A").[A1] = Sheets("A").[A1].Row
End Sub
【代码解析】
Line1:将工作表A的A1单元格的ROW属性,赋值给工作表A的A1单元格。
2.给10个单元格赋值
下面我们提高一些需求难度,给A1:A10单元格赋值,如果你能看懂上面的代码,那就非常简单了,写10行代码就是了。
Sub 赋值2()
With Sheets("A")
.[A1] = .[A1].Row
.[A2] = .[A2].Row
.[A3] = .[A3].Row
.[A4] = .[A4].Row
.[A5] = .[A5].Row
.[A6] = .[A6].Row
.[A7] = .[A7].Row
.[A8] = .[A8].Row
.[A9] = .[A9].Row
.[A10] = .[A10].Row
End With
End Sub
除了写的内容多了之外,没什么问题,何况我们还可以使用复制粘贴,再改单元格地址,也不是很麻烦。
3.给100个单元格赋值,不,玩大点儿,给10W个单元格赋值
同学们,你准备写10W条命令行吗?直接一些,给你答案,代码如下:
Sub 赋值3()
For i = 1 To 100000
With Sheets("A")
.Cells(i, 1) = .Cells(i, 1).Row
End With
Next i
End Sub
Line1:设定循环变量i,循环的范围是从1开始,到100000结束;
Line2:使用Sheets("A")作为同一系列对象的父级隶属关系;
Line3:操作Sheets("A")中,从Cells(1, 1)开始的,Cells(2, 1),……,Cells(i, 1) ,……,到Cells(100000, 1)为止的对象,并将对应的ROW属性赋值给对应单元格;
Line4:结束With语句;
Line5:循环语句的结束语句,满足循环条件时,继续循环,不满足条件时,跳出循环。
上面就是一个用循环语句写的给10W个单元格赋值的代码,加上WITH语句,也就5行命令行。不需要写那么多的命令代码,利用循环代码,可以很方便的操作你需要的数据源,这就是循环语句最根本的优势。
4.循环逻辑图解
作者E图表述认为循环的流程,归纳后也就上面的两种格式,其主要的差别就是:蓝色的流程是先考虑循环条件,满足时才执行语句,不满足时跳出循环;橙色的流程是先执行语句,再判断循环变量是否满足条件,如果不满足,则循环到执行语句再次运行,否则跳出循环。
5.循环语句的两种语法形态
在EXCEL VBA中有两种循环语句,简单来说:一种是Do循环,一种是For循环,而它们又分别有两种格式。
1)Do While…Loop循环语句,举例如下:
需求:在工作表“Do循环”的A列中,找到第一个空单元格。
Sub DoWhile循环()
i = 1
With Sheets("Do循环")
Do While .Cells(i, 1) <> ""
i = i + 1
Loop
MsgBox "第一个空单元格是" & .Cells(i, 1).Address
End With
End Sub
【代码解析】
Line1:确定循环变量初始值为1;
Line2:使用Sheets("Do循环")作为同一系列对象的父级隶属关系;
Line3:循环语句的起始语句,While(循环条件)为单元格不为空;
Line4:单元格不为空的时候,循环条件满足,执行语句i=i+1。这句代码相当的重要,俗称“计数器”,尤其在循环语句中,起到使变量规律性的累增或者累减的效果,当再次使用变量的时候会使对象的引用发生规律性改变;
Line5:循环语句的结束语句,返回到Line3,进行新的i值的判断。当单元格为空时,循环条件不满足,跳出循环;
Line6:Msgbox显示规定的文本说明性文字,即“第一个空单元格是…”。
Do While…Loop的循环结构,满足循环流程图解里面的蓝色流程,属于先判断条件再运行的结构。
2)Do…Loop Until循环语句,举例如下:
需求:还以上例为题,使用Until的方式找到第一个空单元格。
Sub DoUntil循环()
i = 1
With Sheets("Do循环")
Do
i = i + 1
Loop Until .Cells(i, 1) = ""
MsgBox "第一个空单元格是" & .Cells(i, 1).Address
End With
End Sub
代码就不解析了,基本和Do While…Loop的代码一样,唯独循环条件的位置和写法不一样。
Do…Loop Until的循环结构,满足循环流程图解里面的橙色流程,属于先执行语句,再判断条件是否满足,如果不满足条件,继续循环,满足的时候才可以跳出循环。
心得分享
很多初学Excel VBA Do循环的同学,都会在这两个循环上栽跟头,如果这个循环条件找不好,就很容易造成“死循环”。所以作者E图表述分享给大家一个小心得:While条件是看“前门”的,有票许可才能进来玩;Until条件是看“后门”的,有票许可才能出去走。
这样理解后,你在看上面的Until代码,是不是:当单元格为= ""时,结束语句,执行下面的Msgbox。
3)For…Next循环语句:
通过上面的案例我们可以发现循环语句的一个规律,都是先有初始值,再逐步累加或者累减改变循环变量,达到对不同对象的操作,For…Next循环也是如此,不过它更加的直接简便,看一个示例代码。
需求1:对A列的数值进行求和
Sub For循环()
With Sheets("For循环")
a = .[A1040000].End(3).Row
For i = 1 To a
b = b + .Cells(i, 1)
Next i
MsgBox "A列累加值=" & b
End With
End Sub
【代码解析】
Line1:使用工作表("For循环")作为同一系列对象的父级隶属关系;
Line2:以A1040000单元格,向上取末行的行号,并赋值给变量a;
Line3:For循环的起始语句,并规定出从1到a,为循环范围;
Line4:设定一个变量b,b的值等于“b本身的值+单元格的值”,通过循环变量i的变化,将A列单元格遍历一遍,逐步累积求和。这句代码和i=i+1的格式差不多,本身的值加上某个值,达到累加的效果;
Line5:For循环的结束语句,如果下一个i值在范围内,则继续循环,否则跳出循环;
Line6:Msgbox显示规定的文本说明性文字;
Line7:With语句的结束语句。
需求2:还是这列数据,提取偶数行的值累加求和
很简单,一个小知识点就可以搞定的。For循环可以设定在循环范围内,每次循环的步距,只需要将上面的代码加一点点内容,如下:
循环变量从第2行开始,每次的步距(Step)为2个值的距离,那么整体i变量就是2、4、6、8、…如此类推了。
相对于Do循环,For循环可以给出十分确切的起止范围,对于我们遍历工作表,遍历单元格是相当有用而且十分常用的循环方式,它也属于蓝色图解流程,先判断再执行。
4)For Each x In y … Next循环语句:
这个语句严格来说,还是属于For…Next的结构,是另一种形式的表现,以后我们讲到字典的时候,还会再遇到这个结构,今天我们先来初窥端倪,举个例子:
需求:对选中的单元格区域进行求和
Sub Foreach循环()
Dim rg As Range
For Each rg In Selection
a = a + rg.Value
Next
MsgBox "选中区域求和=" & a
End Sub
【代码解析】
Line1:定义一个rg变量,为单元格变量;(后面我们会专门来讲定义变量的问题)
Line2:这句代码用英语直译就好,在Selection(被选中的单元格区域)中,循环每一个rg单元格变量;
Line3:累加给变量a;
Line4:For循环的结束语句,如果下一个rg值在Selection范围内,则继续循环,否则跳出循环;
Line5:Msgbox显示规定的文本说明性文字。
这个结构的For循环,主要是指在一个指定的“对象集”中,遍历每一个单独对象,也属于蓝色图解流程,先判断再执行,如果在“对象集”中,就执行语句,否则跳出循环。
【编后语】
今天的教程给大家介绍了VBA中最常见最重要语句之一循环语句。学到了循环,才能说明同学们“上道”了,否则就真的只是“手残VBA”,会看不会写。对于循环来说,初学者理解起来都需要过程,可是你要知道真正的实战中还有很多的变数等着我们去总结、去填坑,找个时间赶紧动手试一下吧,祝同学们早日写出自己的代码。
下篇将继续为大家分享VBA中另一重要语句,判断语句。
本文配套的练习课件请加入QQ群:1043683754下载。
做Excel高手,快速提升工作效率,部落窝教育《一周Excel直通车》视频和《Excel极速贯通班》直播课全心为你!
扫下方二维码关注公众号,可随时随地学习Excel:
相关推荐:
VBA基础教程②《VBA系列基础教程(二):使用RANGE对象实现单元格偏移及确定首末行列号》
VBA基础教程①《VBA系列基础教程(一):excel中最常使用的对象——RANGE》
用VBA制作疫情地图《用excel制作全国动态疫情地图(VBA篇)》
用VBA使excel自杀《灵异事件!一打开工作簿,文件就“自杀”了???》