前端循环根据条件对象内赋值_excel编程系列基础:常用语句之循环语句的逻辑理解...

b64f22c8295da9233ec07238d1cbd8eb.png

编按:哈喽,大家好!今天是第三篇VBA实战入门教程,我们将给大家带来VBA中最常见语句之一,循环语句。典型的循环语句有4种,分别是Do While…Loop循环、Do…Loop Until循环、For…Next循环、For Each x In y … Next循环。查看循环逻辑图可以更快理解循环语句。学习更多技巧,请收藏关注

部落窝教育​www.itblw.com


【前言】

在看过我们前两篇的VBA实战入门教程后,有没有兴趣继续学习呢?也许同学们的兴趣早就有了,但就是还没有找到入门的路,当然了前面的两篇文章也算不得是让你入门的途径,充其量也就是一道“开胃菜”。继续跟上作者E图表述的步伐,我不会让你像“哑巴英语”似的,变成只会看不会写的“手残VBA”。那如果前两篇的文章让你了解了一些单元格对象的属性,那现阶段,你就需要了解写代码中不可规避、而又十分重要的两个“语句”!

一、循环语句

1.给一个单元格的赋值

在前面的文章中,同学们应该抓住了一个知识点,就是对单元格的赋值过程。什么是赋值呢?就是将一个表达式的结果,输入到某一个(某一个区域)单元格对象的VALUE属性中,例如下面的写法:

5a11bc6d5a80f65855284a91bc976ad0.png

Sub 赋值1()

Sheets("A").[A1] = Sheets("A").[A1].Row

End Sub

【代码解析】

Line1:将工作表A的A1单元格的ROW属性,赋值给工作表A的A1单元格。

2.给10个单元格赋值

下面我们提高一些需求难度,给A1:A10单元格赋值,如果你能看懂上面的代码,那就非常简单了,写10行代码就是了。

bcc9a51d61a139a224ee6838103d0d12.png

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

881f9142310a04dff831af2f3d60b1c2.png

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.循环逻辑图解

b692dfd02a4678b4cfe96323ca774fcc.png

作者E图表述认为循环的流程,归纳后也就上面的两种格式,其主要的差别就是:蓝色的流程是先考虑循环条件,满足时才执行语句,不满足时跳出循环;橙色的流程是先执行语句,再判断循环变量是否满足条件,如果不满足,则循环到执行语句再次运行,否则跳出循环。学习更多技巧,请收藏关注

部落窝教育​www.itblw.com

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

4bd31a110cde7d5bee887a0f96914eab.png

【代码解析】

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

abb5b32dd86fbc61396f5b3a15eab80c.png

代码就不解析了,基本和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

9dfaaf2da0671d98ae29ce530ea9bf66.png

【代码解析】

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循环可以设定在循环范围内,每次循环的步距,只需要将上面的代码加一点点内容,如下:

0bfd87406e40b0e498c53807c2737bf6.png

循环变量从第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

8c1b85ffd5f9d3d57e8e23dd487527d9.png

【代码解析】

Line1:定义一个rg变量,为单元格变量;(后面我们会专门来讲定义变量的问题)

Line2:这句代码用英语直译就好,在Selection(被选中的单元格区域)中,循环每一个rg单元格变量;

Line3:累加给变量a;

Line4:For循环的结束语句,如果下一个rg值在Selection范围内,则继续循环,否则跳出循环;

Line5:Msgbox显示规定的文本说明性文字。

这个结构的For循环,主要是指在一个指定的“对象集”中,遍历每一个单独对象,也属于蓝色图解流程,先判断再执行,如果在“对象集”中,就执行语句,否则跳出循环。

【编后语】

今天的教程给大家介绍了VBA中最常见最重要语句之一循环语句。学到了循环,才能说明同学们“上道”了,否则就真的只是“手残VBA”,会看不会写。对于循环来说,初学者理解起来都需要过程,可是你要知道真正的实战中还有很多的变数等着我们去总结、去填坑,找个时间赶紧动手试一下吧,祝同学们早日写出自己的代码。
下篇将继续为大家分享VBA中另一重要语句,判断语句。学习更多技巧,请收藏关注

部落窝教育​www.itblw.com

​。

****部落窝教育-excel循环语句逻辑理解****

原创:E图表述/部落窝教育(未经同意,请勿转载)

更多教程:

部落窝教育​www.itblw.com

微信公众号:exceljiaocheng,+v:blwjymx2

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页