• Excel VBA入门(四)流程控制2-循环控制


    所谓循环控制,即在循环执行一段代码,用于完成一些重复性任务。

    VBA中的循环控制语句主要有3种:for、while、loop。对于大多数人来说,for的使用频率最高,而我个人也觉得for是最为灵活的,在很多场合下都可以使用,相较while和loop,其逻辑也再加清晰,更便于对循环进行控制。

    1. For循环

    for循环有两种形式,一种为明确地知道要循环的次数的,比如从1到10循环执行10次;另一种则用于循环历遍某个集合对象,这个对象有多少个单位就循环执行多少次,可以视为是未知循环次数的。

    ① 循环次数已知的for

    其格式如下:

    for 计数变量=开始值 to 结束值
        ' 用于循环执行的语句
    next
    

    通常我们会需要对Excel表格中的每一行(或每一列)进行循环历遍,对其中单元格的值进行各种操作。这时候,就可以先求出该工作表中有多少行(或列),然后再逐行(列)进行判断。这个操作单元格的示例会在后面有专门的章节来讲解演示,这里就只讲循环语句本身了。

    示例如下:

    For i = 1 To 10
        Debug.Print i
    Next
    

    以上代码将会依然输出1到10这10个数字

    在这种形式的For里面,还可以在[结束值]后面加上Step,然后跟着写上步长,如果省略,则默认步长为1。像上例,默认是把i从1递增到10,即:1、2、3、4、5、6、7、8、9、10这样依次递增的。如果像下面这样写,把步长设置为2,则变成了:1、3、5、7、9。则循环体(即For里面的代码)只会执行5次。

    For i = 1 To 10 Setp 2
        Debug.Print i
    Next
    

    输出:1 3 5 7 9

    ② 循环次数不确定的For

    格式如下:

    For Each 循环变量 In 循环对象
        ' 循环执行的语句
    Next 循环变量
    

    结合之前讲过的数组来举个例子。假设已有数组myArr并且已赋值,则可以用以下代码历遍它的每个值:

    For Each a In myArr
        Debug.Print a
    Next a
    

    这样就不管这个数组包含有多少个元素,都可以逐个历遍。

    2. Loop循环

    Loop循环或许把它称为Do...Loop循环会更加合适。因为它的格式是先Do再Loop的。但我喜欢把它叫Loop循环。

    Loop循环也有两种形式。第一种是先判断循环条件再开执行,第二种先执行一次然后再判断循环条件是否成立。

    ① 先判断再执行

    格式如下:

    Do [While | Until] 循环条件
        ' 用于循环执行的语句
    Loop
    

    这里的[While | Until]表示两者随便用一个都可以。While就是当条件成立的时候就执行,而Until就是直到条件成立时就停止执行。也就是说,While用于指定循环的条件,说明什么时候就执行循环,而Until用于指定停止循环的条件,说明什么时候不再执行循环。这么说可能有些许抽象,举例说明。

    Do While ... Loop

    Sub test()
        Dim i As Integer
        i = 5
    
        Do While i > 0
            Debug.Print i
            i = i - 1
        Loop
    End Sub
    

    上例的输出结果是:5 4 3 2 1

    Do Until ... Loop

    Sub test()
        Dim i As Integer
        i = 5
    
        Do Until i < 0
            Debug.Print i
            i = i - 1
        Loop
    End Sub
    

    上例的输出结果是:5 4 3 2 1 0

    逻辑还是很简单的,大家可以稍微分析下为什么用While时输出到1就停止了,而用Until时后面会多出个0,而如果需要不让它输出0程序应该怎么改写。搞清楚原因,这个While和Until的区别也就知道了,Loop循环应该也就掌握了。

    ② 先执行再判断

    先执行再判断,即将条件判断语句放到Loop的后面,先Do一次,然后再Loop While或者Loop Until。

    格式如下:

    Do
        ' 用于循环执行的语句
    Loop [While | Until] 循环条件
    

    示例如下:

    Do ... Loop While

    Sub test()
        Dim i As Integer
        i = 5
    
        Do
            Debug.Print i
            i = i - 1
        Loop While i > 0
    End Sub
    

    输出结果为:5 4 3 2 1

    Do ... Loop Until

    Sub test()
        Dim i As Integer
        i = 5
    
        Do
            Debug.Print i
            i = i - 1
        Loop Until i < 0
    End Sub
    

    输出结果为:5 4 3 2 1 0

    Loop循环总结:可以看到,无论是采用哪种形式的Loop循环,都可以得到相同的结果,实现同样的功能,而具体使用哪一种,纯粹是个人习惯(个人喜欢)。但无论使用哪一种,都一定一定要记得,必须要有能使循环结束的语句出现在循环中(例如前面例子中的i=i-1),否则程序会永远不停地执行下去。这时候除了在任务管理器中结束Excel外,就没有什么更好的办法了。

    3. While循环

    While循环有点类似于Loop循环,先判断条件是否成立,再开始(或结束)循环。而我看过的教程里面,有些是没有讲到While循环的。可能是作者觉得没有必要讲了。

    While循环的格式如下:

    While 条件判断语句
        ' 用于循环执行的语句
    Wend
    

    示例如下:

    Sub test()
        Dim i As Integer
        i = 5
    
        While i > 0
            Debug.Print i
            i = i - 1
        Wend
    End Sub
    

    输出结果为:5 4 3 2 1

    同样要记住的是,必须要有使循环能够结束的条件,否则程序会进入死循环中。

    由以上示例可以看出,这3种循环语句,是有着某些共同之处的,特别是Loop和While循环。而事实上很多循环事件,用3者都能实现。具体使用哪一种,则或根据实际情况和使用习惯来选择。但相信对于大多数人来说,都会优先考虑使用For循环,因为它的条理更加清晰,流程控制更简易,适用的场景更广,语句也更简练(至少它不需要显式添加使循环结束的语句)


    本系列教程其它文章

    Excel VBA 入门(零)
    Excel VBA 入门(一)数据类型
    Excel VBA 入门(二)数组和字典
    Excel VBA 入门(三) 流程控制1-条件选择
    Excel VBA 入门(四)流程控制2-循环控制
    Excel VBA 入门(五)Excel对象操作
    Excel VBA 入门(六)过程和函数
    Excel VBA 入门(七)注释、宏按钮及错误处理
    Excel VBA 入门(八)单元格边框
    Excel VBA 入门(九)操作工作薄
    Excel VBA 入门(十)用户窗体开发

  • 相关阅读:
    UWP 应用获取各类系统、用户信息 (1)
    Windows Composition API 指南
    详解 UWP (通用 Windows 平台) 中的两种 HttpClient API
    Win2D 官方文章系列翻译
    Spring的IOC容器, AOP切面及启动流程简述
    maven和gradle的全局阿里云镜像代理
    SpringBoot项目中@Async方法没有执行的问题分析
    Oracle向MySQL迁移的注意点整理
    SpringBoot项目替换内部的依赖jar包
    MySQL的主从复制
  • 原文地址:https://www.cnblogs.com/wuzhiblog/p/vba_four.html
Copyright © 2020-2023  润新知