Excel VBA入门(三) 流程控制1-条件选择

时间:2021-10-17 02:22:26

VBA中的流程控制分为两种,其一是条件结构式的,即根据条件判断的结果去选择性执行相应的语句(块);另一种是循环,即循环地执行语句(块)。本节介绍第一种。

1. IF

if 语句其实包含有几种形式:

① If...Then...End If

其格式为:

If 逻辑表达式 Then
' 如果逻辑表达式为真,则执行这里的语句
End if

例如:

If 8 > 5 Then
Debug.Print "Yes"
End If

输出结果为:Yes

② If...Then...Else...End If

其格式为:

If 逻辑表达式 Then
' 如果逻辑表达式为真,则执行这里的语句
Else
' 否则(即逻辑表达式为假),则执行这里的语句
End If

例如:

If 8 < 5 Then
Debug.Print "Yes"
Else
Debug.Print "No"
End If

输出结果为:No

③ If...Then...ElseIf...Then...End If

与第①种类似,只是它多了一层判断。当然,这种ElseIf是可以多层嵌套的。

其格式为:

If 逻辑表达式1 Then
' 逻辑表达式1为真,则执行这里的语句
ElseIf 逻辑表达式2 Then
' 逻辑表达式2为真,则执行这里的语句
Else
' 逻辑表达式1和2都返回了假,则执行这里的语句
End If

例如:

If 20 > 30 Then
Debug.Print "Not Right"
ElseIf 20 < 30 Then
Debug.Print "Right"
End If

输出结果为:Right

2. Select Case

Select Case语句在功能与If语句非常相似,只是组织形式略有不同。它有2种形式

① 不带Else的Select Case

格式为:

Select Case 测试表达式
Case 表达式1
' 如果测试表达式等于表达式1,则执行这里的语句
Case 表达式2
' 如果测试表达式等于表达式2,则执行这里的语句
Case 表达式3
' 如果测试表达式等于表达式3,则执行这里的语句
' 后面可以有更多的Case
End Select

例如常见的判断成绩等级的过程,可以用Select Case进行判断:

Sub test()
Dim score As Integer
score = 94
Select Case score
Case Is >= 90
Debug.Print "优"
Case Is >= 80
Debug.Print "良"
Case Is >= 60
Debug.Print "中"
Case Is < 60
Debug.Print "差"
End Select
End Sub

此处有2点需要说明的,其一是上例与前面讲的格式相比,在“Case 表达式” 中间有个Is。这个是用于表达式判断时候用的格式,这样才能够起到类似于If...Else的作用。上例中如果直接用Case 90的格式,则只会当score等于90的时候,才会输出“优”,起不到范围判断的作用。在使用的时候,需要根据实际情况按需选择。第二点是,在如上例中那样进行不同范围内的判断时,顺序很重要,如果把上例中的顺序倒过来,则程序会输出“中”,因为score=94时,Case Is >= 60这条语句成立,后面的就不会再执行了。

② 带Else的Select Case

其实就是类似于If语句中的Else一样,当前面的所有情况都不符合时,就执行Else里面的语句。如上例中最后的Case Is < 60就可以改为Case Else

Sub test2()
Dim score As Integer
score = 53
Select Case score
Case Is >= 90
Debug.Print "优"
Case Is >= 80
Debug.Print "良"
Case Is >= 60
Debug.Print "中"
Case Else
Debug.Print "差"
End Select
End Sub

** Select Case 番外篇 **

如果需要在Case条件中使用闭合区间,即同时出现大于且小于的情况,如上例中,大于60且小于70。则需要使用两个Is语句,中间用逗号隔开:

Sub test2()
Dim score As Integer
score = 53
Select Case score
Case Is >= 90
Debug.Print "优"
Case Is >= 80
Debug.Print "良"
Case Is >= 60, Is <= 70
Debug.Print "中"
Case Else
Debug.Print "差"
End Select
End Sub

本系列教程其它文章

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 入门(十)用户窗体开发

Excel VBA入门(三) 流程控制1-条件选择的更多相关文章

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

    所谓循环控制,即在循环执行一段代码,用于完成一些重复性任务. VBA中的循环控制语句主要有3种:for.while.loop.对于大多数人来说,for的使用频率最高,而我个人也觉得for是最为灵活的, ...

  2. Excel VBA入门(九)操作工作薄

    虽然我前面讲过,在VBA中操作工作薄并不是件明智的事,但有些时候,还是避免不了要这么做.绝大多数情况下,我们要做的是获取到某个工作薄对象,并以此来获得其中的工作表对象,然后再对工作表中的数据进行处理. ...

  3. Excel VBA入门(八)单元格边框

    本文基于以下文件 http://pan.baidu.com/s/1nvJtsu9 (部分)内容预览: 1. 边框样式 Sub cell_format() Dim sht As Worksheet Di ...

  4. Excel VBA入门(七)注释、宏按钮及错误处理

    系统性的知识前面已经讲完,从本章开始,本系列教程涉及的将会是一些相对凌散的内容. 1. 注释 代码注释是一件利人利己的事,为了方便自己在代码需要更新修改时,依然能够快速地看懂自己完的每一行代码到底是什 ...

  5. Excel VBA入门(六)过程和函数

    前面讲过,VBA代码有两种组织形式,一种就是过程(前面的示例中都在使用),另一种就是函数.其实过程和函数有很多相同之处,除了使用的关键字不同之外,还有不同的是: 函数有返回值,过程没有 函数可以在Ex ...

  6. Excel VBA入门(五)Excel对象操作

    本章是本系列教程的重点.但我觉得应该不是难点.从第零章开始到学完本章,应该可以把VBA用于实战中了. Excel对象主要有4个: 工作薄 Workbook 工作表 Worksheet 单元格区域 Ra ...

  7. Excel VBA入门(一)数据类型

    与其它的编程语言一样,VBA也有它自己的数据类型.讲到数据类型,就离不开"变量"与"常量"这两个概念,变量与常量,都是用于保存数据的.顾名思义,"变量 ...

  8. Excel VBA入门(二)数组和字典

    数组和字典也是VBA的常用到数据类型之一.但是我翻了有四五本VBA教程相关的书,里面都没有介绍到字典,数组到是在介绍数据类型时有介绍,而并没有提到字典. 事实上,字典不是VBA内置的类型,它是Wind ...

  9. Excel VBA 入门(零)

    本教程所用系统环境: Windows 10 Excel 2013 1. 添加开发工具 打开Excel,依然找到"文件"->"选项"->"自 ...

随机推荐

  1. java数据结构&lowbar;笔记&lpar;5&rpar;&lowbar;图的算法

    图的算法 1 图的遍历图的遍历就是从图中某个顶点出发,按某种方法对图中所有顶点访问且仅访问一次.遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础. 2 深度优先遍历从图中某个顶点V 出发 ...

  2. Java编程经验——Long等包装类型判断

    int等基本数据类型的值是可以通过=或者!=进行比较的,但是对于Long等包装类型想比较其和某个值是否相等是不能通过=或者!=来比较的,那究竟要怎么样进行比较呢? if (null != projec ...

  3. MySQL数据库免安装版配置

    参考文章: http://www.bkjia.com/Mysql/1093427.html

  4. jquery的extend&lpar;&rpar;函数

    extend()是在写插件的过程中常用的方法,该方法有一些重载原型. 1.该方法的原型是: extend(dest,src1,src2,src3...); 它的含义是将src1,src2,src3.. ...

  5. Oracle SQL Developer 免费的DB2客户端

    问题地址:https://*.com/questions/8600735/is-there-any-opensource-db2-client 软件地址:http://www. ...

  6. 网络编程之实现server端并发聊天

    程序如下: import socketserver class MyServer(socketserver.BaseRequestHandler): #自己定义一个类,继承BaseRequestHan ...

  7. kdump简单的介绍

    kdump是2.6.16之后,内核引入的一种新的内核崩溃现场信息收集工具.当一个内核崩溃后(我们称之为panic),内核会使用kexec(类似于进程的exec,把当前内核换掉)进入到一个干净的备份内核 ...

  8. 十步轻松搞定IIS&plus;PHP环境搭建

    突然心血来潮想着自己一直使用Apache+php的模式,想要了解一下IIS+php的模式.说起来也算是九曲十八弯吧! 第一部分:以ISAPI.dll 扩展的形式 结果按照资料上面说的我就是找不到一个i ...

  9. Linux命令行得到系统IP

    输入ifconfig得到 eth0 Link encap:Ethernet HWaddr :::2E:9A: inet addr:192.168.1.1 Bcast:192.168.1.255 Mas ...

  10. golang包管理工具及环境管理工具&semi;如何下载外网的依赖包

    简介: golang的包管理工具类似于java的maven.python的pip.js的npm,可以实现依赖包的统一管理:有很多:govendor.godep.glide,挑一个自己喜欢的用吧.mac ...