Excel VBA 编程基础 -- 语句(五)- 条件语句(三)
- 2026-11-01 20:53:20
Excel VBA 编程基础 -- 语句(五)- 条件语句(三)昨天我们讲到了 Select Case 语句。Select Case 语句主要用于“多中选一”的场合,If 语句虽然适用于各种条件判断的场景,但正如我们上文例子所展示的,在多重嵌套的情况下,使用 Select Case 会使得逻辑更加清晰。今天我们继续讨论 Select Case 语句。 Select Case 语句的一般形式是: testexpr 是一个测试表达式,Select Case 语句将这个表达式求值的结果和 Case 中的条件 condition 相比较,和哪个 condition 的比较结果为真,就执行哪个对应的 statement。 下面看几个例子 例1. 判别奇偶数 上面代码的意思是:如果 n Mod 2 的结果为 0,则执行 Case 0 对应的 Debug.Print,输出 n 是偶数 的结果。如果不为 0,则执行 Case Else 对应的 Debug.Print,输出 n 是奇数的结果。 上面的 Select Case 与下面的 If ... End If 等价: 仔细观察,可以看出它们之间完美的对应关系。 例2. 0 - 9 的数字分类 根据素数还是合数将 0 ~ 9 的数字进行分类,其中要区别出 0 和 1,因为这两个数既不是素数也不是合数。 这个例子中特别有意思的是 Case 2, 3, 5, 7,这说明 Case condition 中的 condition 可以是若干个值的列举。这实际上是下列若干条件的简化表示法: 这种简化表示法使得代码简洁优美,表达力强,超过了 If 语句。上面的 Case 2, 3, 5, 7 如果用 If 语句来写,就会是这样: 这一长串由 Or 组合起来的布尔表达式(boolean expression),明显不如 Case 2, 3, 5, 7 来得简洁优美。 布尔表达式简介 布尔表达式就是求值结果为 True 或 False 的表达式。我们前面已经介绍过,Boolean 类型的值域就是集合 { True, False },并且 VBA 内部用 -1 代表 True,0 代表 False。所以,在将一个算术表达式转换为 Boolean 类型的时候,如果表达式的求值结果为 0,则转换为 Boolean 类型的 False,非 0 则一律转换为 Boolean 的 True,转换以后的内部值是 -1。请见下面的测试例子: 
图1 Boolean 类型测试 这个测试用例说明:所有的算术值(不论是整型还是浮点型)都可以使用 CBool 转换函数转换为 Boolean 类型;而且,根据其值为 True 或 False,分别以其内部表示 -1 或 0,Boolean 类型还可以参与算术运算。 Boolean 表达式还可以用 And、Or、Not 等逻辑运算符连接起来组成更复杂的 Boolean 表达式。参见下面的例子。 例3. 数值范围判断 Case condition 中的 condition 还可以是 Is < 0 这样的布尔表达式,注意这里的 Is 是 VBA 的关键字(keyword),不是变量名。也可以认为此处的 Is 是一个占位符:因为 Case < 0 不合语法,也不能写 Case n < 0,所以使用 Is < 0 来表示 n < 0。 第二个有意思的地方是 0 to 9 这种写法。这种写法表示一个范围:0 - 9。Case 0 to 9 等价于 Case 0, 1, 2, 3, 4, 5, 6, 7, 8, 9。对于项数很多的情况,一一列举显得很累赘,用 0 to 9 这样的区间表示法就既简洁又优美。 注意:Select Case 中用 Is 表示的 Boolean 表达式不能再用 And、Or 等逻辑运算符连接组成更复杂的 Boolean 表达式。譬如,Case 0 to 9 就不能表示为 Case (Is >= 0) And (Is <= 9)。虽然在 Case 中可以写 Case Is >= 0, Is <= 9,但这个中间的逗号表示 Or 的意思,表示两个区间:(-∞, 9] 和 [0, ∞)。因此并不等价于用 And 表示的区间 [0, 9]。 相关阅读 Excel VBA 编程基础 -- 语句(三)- 条件语句 Excel VBA 编程基础 -- 语句(四)- 条件语句
Select Case testexprCase condition_1statement_1Case condition_2statement_2...Case condition_nstatement_nCase Elsestatement_elseEnd Select
Dim n As Integer...Select Case n Mod 2Case 0Debug.Print "n is Even"Case ElseDebug.Print "n is Odd"End Select
Dim n As Integer...If n Mod 2 = 0 ThenDebug.Print "n is Even"ElseDebug.Print "n is Odd"End If
Dim n As Integer...Select Case nCase 0Debug.Print n & " 是 0"Case 1Debug.Print n & " 是 1"Case 2, 3, 5, 7Debug.Print n & " 是素数"Case ElseDebug.Print n & " 是合数"End Select
...Case 2Debug.Print ...Case 3Debug.Print ...Case 5Debug.Print ...Case 7Debug.Print ......
...If (n = 2) Or (n = 3) Or (n = 5) Or (n = 7) ThenDebug.Print n & " 是素数"End If...

Dim n As Integer...Select Case nCase Is < 0Debug.Print n & " 是负数"Case 0 to 9Debug.Print n & " 是小于 10 的非负整数"Case Is >= 10Debug.Print n & " 是大于等于 10 的整数"Case ElseDebug.Print "未知"End Select
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。