新浪新闻客户端

excel编程系列基础:常用语句之循环语句的逻辑理解

excel编程系列基础:常用语句之循环语句的逻辑理解
2020年05月23日 07:00 新浪网 作者 部落窝教育

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

  一、循环语句

  1.给一个单元格的赋值

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

  excel编程系列基础:常用语句之循环语句的逻辑理解

  Sub 赋值1()

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

  End Sub

  【代码解析】

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

  2.给10个单元格赋值

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

  excel编程系列基础:常用语句之循环语句的逻辑理解

  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

  excel编程系列基础:常用语句之循环语句的逻辑理解

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

  excel编程系列基础:常用语句之循环语句的逻辑理解

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

  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

  excel编程系列基础:常用语句之循环语句的逻辑理解

  【代码解析】

  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

  excel编程系列基础:常用语句之循环语句的逻辑理解

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

  excel编程系列基础:常用语句之循环语句的逻辑理解

  【代码解析】

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

  excel编程系列基础:常用语句之循环语句的逻辑理解

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

  excel编程系列基础:常用语句之循环语句的逻辑理解

  【代码解析】

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

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

  Line3:累加给变量a;

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

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

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

  【编后语】

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

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

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

  更多教程:部落窝教育

特别声明:以上文章内容仅代表作者本人观点,不代表新浪网观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与新浪网联系。
权利保护声明页/Notice to Right Holders

举报邮箱:jubao@vip.sina.com

Copyright © 1996-2024 SINA Corporation

All Rights Reserved 新浪公司 版权所有