乐于分享
好东西不私藏

Excel VBA 编程基础 — 语句(三)- 条件语句

Excel VBA 编程基础 — 语句(三)- 条件语句

在前面讨论赋值语句并重点强调数据类型转换的基础上,今天我们来讨论条件语句。
所谓条件语句(conditional statement),是指根据条件做出选择的语句。VBA 支持两种条件语句:If … End If,以及 Select Case … End Select。
If … End If 语句
我们先来看一个例子:
Dim n As Integer' ...If n Mod 2 = 0 Then  Debug.Print "n is Even"Else  Debug.Print "n is Odd"End If
在上面的代码片段中,Mod 是一个模运算符(很多语言中都用 % 表示),n Mod 2 表示求 n 除以 2 的余数。如果 n 除以 2 的余数等于 0,那也就是说,n 能被 2 整除,则表示 n 是偶数,否则 n 是奇数。
n Mod 2 = 0 这个表达式是一个条件表达式,条件表达式的求值结果是一个 Boolean 类型的值。Boolean 类型只有两个值:True 和 False。如果 n 是偶数,譬如 n 的值为 10,则 n Mod 2 的结果为 0,整个条件表达式就变成了 0 = 0,这个表达式的结果就是 True。
在表达式 n Mod 2 = 0 中,Mod 是模运算符,= 是 比较运算符,模运算符的优先级高于比较运算符,所以 n Mod 2 = 0 等价于 (n Mod 2) = 0。也就是说,在求取表达式 n Mod 2 = 0 的值时,先求子表达式 n Mod 2 的值,然后再用求得的值与 0 进行比较,如果相等,结果就是 True,如果不相等,结果就是 False。
在上面的例子中,如果 n Mod 2 = 0 的值为 True,就执行 If 和 Else 之间的语句,即 Debug.Print “n is Even”;如果为 False,就执行 Else 和 End If 之间的语句,即 Debug.Print “n is Odd”。这就是根据条件(n Mod 2 = 0)做出选择(是执行 Debug.Print “n is Even” 还是 Debug.Print “n is Odd”)的意思。
If … End If 语句有几种形式:
  • 单语句形式:If … Then …
  • If … Then … End If 形式
  • If … Then … Else … End If 形式
  • 嵌套形式
If … Then …
如果是判断某条件成立的话,则执行一条语句,对于这样非常简单的判断,只需要使用最简 If 语句。在这种语句中,条件和要执行的语句都写在同一行上。如下面的例子:
Dim n As Integer' ...If n < 0 Then n = -n' ...
在上面的例子中,n 是 Integer 类型的变量,n 的值既可能是负数,也可能是正数(准确地说是非负数)。下面的代码要保证 n 是非负数,则需要这样一条 If 语句,来判断 n 当前的值是否为负,如果是,则利用“负负得正”的数学原理,取其 -n 的值(这里的负号 – 是一元运算符,其作用是将其操作数反号)。
If … Then … End If
如果条件为真时需要执行多条语句,则需要用 End If 作为 If 语句的结束符,以告之 VBA 此 If 条件句包含了多条要执行的语句。如下面的例子:
If Sheet1.Range("A1") Mod 2 = 0 ThenSheet1.Range("A1").Interior.Pattern = xlSolidSheet1.Range("A1").Interior.PatternColorIndex = xlAutomaticSheet1.Range("A1").Interior.Color = RGB(25500)End If
这段代码就是一个复杂的 If 语句的例子,条件是判断 A1 单元格的值是否能被 2 整除,如果是,则将背景颜色设置为红色。将单元格背景颜色设置为红色是需要多条语句才能完成的一系列操作。因此,这个 If 语句需要用 End If 作为结束符,将三条赋值语句扩在其中。
If … Then … Else … End If
这种 If 语句形式我们在开头就已经见到了。现在我们把上面的例子扩充一下,如果 A1 单元格的值不能被 2 整除,则将单元格的背景颜色设置为绿色。如下所示:
Sheet1.Range("A1").Interior.Pattern = xlSolidSheet1.Range("A1").Interior.PatternColorIndex = xlAUtomaticIf Sheet1.Range("A1") Mod 2 = 0 ThenSheet1.Range("A1").Interior.Color = RGB(25500)ElseSheet1.Range("A1").Interior.Color = RGB(02550)End If
在这个例子中,为了避免啰嗦,我们把设置单元格背景填充模式的语句移到了 If 语句前面,这样,If 语句就只有两条语句了:根据单元格内容是否能被 2 整数而分别设置为红色还是绿色。
RGB 是 VBA 的一个函数,其语法格式是:
RGB(red, green, blue)
这是一个根据红、绿、蓝三原色来组合颜色的函数。RGB(0, 0, 0) 是黑色,RGB(255, 255, 255) 是白色,RGB(255, 255, 0) 是黄色,等等。
嵌套形式
If 语句是一个功能很强大的结构,既可以构造很复杂的条件,也可以构造很复杂的多层嵌套关系。
譬如说,对于 0 – 100 分的学生成绩,如何对应为 优秀、良好 等等的定性评价?这就需要用到嵌套的 If 条件句。代码示例如下:
If Score >= 95 Then  Debug.Print "Excellent"ElseIf Score >= 85 Then  Debug.Print "Very Good"ElseIf Score >= 75 Then  Debug.Print "Good"ElseIf Score >= 60 Then  Debug.Print "Pass"Else  Debug.print "Failed"EndIf
对于这种需要判别多种情况的情形,就需要使用这种嵌套结构的 If 语句。
我们说上面的代码中使用的是嵌套结构的 If 语句,如果嵌套结构不容易看出来的话,我们把代码修改成下面的等价形式:
If Score >=95Then  Debug.Print "Excellent"Else  If Score >=85Then    Debug.Print "Very Good"Else    If Score >=75Then      Debug.Print "Good"Else      If Score >=60Then        Debug.Print "Pass"Else        Debug.Print "Failed"End IfEnd IfEnd IfEnd If
这段代码和上面的等价。这样修改以后,就很容易看出其中的嵌套结构了,因为每一个 Else 里面都嵌套了一个 If … Then … Else … End If 结构。
相关阅读
Excel VBA 编程基础 — 语句
Excel VBA 编程基础 — 语句(二)
本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » Excel VBA 编程基础 — 语句(三)- 条件语句

猜你喜欢

  • 暂无文章