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. 让nodejs 支持 es6 import

    备注:    尽管nodejs 新版本已经支持es6 的好多特性了,但是还是有部分不支持,为了使用,实际上我们有一个 比较强大工具 bable,下面介绍几个比较简单的用法. 1. bable-cli ...

  2. Microsoft Visual Studio小技巧

    main函数调试参数: Project -> Properties -> Configuration Properties -> Debugging 在Command Argumen ...

  3. 运维命令:tcpdump

    tcpdump命令  tcpdump 命令是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用 -w 选项将数据包保存到文件中,方便以后分析. 常用参数: -a:尝试将网络 ...

  4. pat1022__字符串查找

    主要是对字符串的查找,为了方便并且快速的实现查找,用map会比较方便 同时如何把一个带有空格的字符串变成多个单词也有一个小技巧 char *point=book[i].keyWord;//关键词分离 ...

  5. golang回调函数的例子

    package main import "fmt" type TestStruct struct { } func (object *TestStruct) test(msg st ...

  6. C++中const使用注意要点(一)

    最近看<C++编程思想>发现自己的基础确实不牢固,也想起了以前写代码时也因为const的事情浪费过时间,这里总结下几个要点. 首先说下内部链接和外部链接. 当一个cpp文件在编译时,预处理 ...

  7. 深入理解jQuery框架-框架结构

    这是本人结合资料视频总结出来的jQuery大体框架结构,如果大家都熟悉了之后,相信你们也会写出看似高档的js框架: jquery框架的总体结构 (function(w, undefined){ //定 ...

  8. ffmpeg 基本数据结构和对象: AVPacket、AVPicture、AVFrame

    一.AVPacket /** * AVPacket 作为解码器的输入 或 编码器的输出. * 当作为解码器的输入时,它由demuxer生成,然后传递给解码器 * 当作为编码器的输出时,由编码器生成,然 ...

  9. Java程序员之JS(一) 入门

    背景:使用了JS做一个 WEB 项目之后,一直有使用JS 的一个功能,突然某一天项目重新规划,开始自己手动写一些原始JS,情况不妙,原来之前一直是用同事搭建好的框架在开发,对 JS 零基础的我一直在 ...

  10. Java-Runoob:Java StringBuffer 类

    ylbtech-Java-Runoob:Java StringBuffer 类 1.返回顶部 1. Java StringBuffer 和 StringBuilder 类 当对字符串进行修改的时候,需 ...