If 〈条件1〉 Then
〈语句块1〉
ElseIf 〈条件2〉 Then
〈语句块2〉
·
·
·
Else
〈语句块n+1〉
End If
当条件1为真时执行语句块1,否则,若条件2为真,则执行语句块2……如果所有的条件都不成立,则执行Else后面的语句块n+1。
例如为了更方便地浏览指定的工作表,希望限定活动单元格指针只能在工作表的3~9列内移动;当活动单元格位于3~9列之外时,将单元格指针移至该行的第3列;当活动单元格位于第9列,再右移时,单元格指针自动移至下一行的第3列。为此可以使用If结构的宏实现。相应的VBA程序如下所示:
Sub Move( )
‘在工作表的3~9列内右移单元指针
‘快捷键 Ctrl+Shift+M
If ActiveCell.Column < 3 Or ActiveCell.Column > 9 Then
Cells(ActiveCell.Row, 3).Select
ElseIf ActiveCell.Column = 9 Then
Cells(ActiveCell.Row + 1, 3).Select
Else
ActiveCell.Offset(0, 1).Select
End If
End Sub
Select Case语句与If...Then...ElseIf语句非常相似,只是当判断控制仅取决于一个测试变量时,使用Select Case结构更有效、更简捷。Select Case语句的格式如下:
Select Case 〈测试变量〉
Case 〈表达式1〉
〈语句块1〉
Case 〈表达式2〉
〈语句块2〉
·
·
·
Case Else
〈语句块n+1〉
End Select
该语句的功能是:首先将测试变量的值与Case后面表达式的值相比较,哪个表达式与测试变量匹配就转向执行哪段语句块,执行完毕便转向End Select语句之后继续往下执行。如果所有的条件都不成立,则执行Case Else后面的语句块n+1。
在Select Case语句中,测试变量可以是变量、属性或表达式。Case语句后面的表达式有可以为一般表达式,也可以为Is关系表达式。
一般表达式可以由多个表达式组成,其间用“,”和“To”分隔,前者表示“或”,只要其中有一个表达式匹配即执行该Case语句对应的语句块。后者表示范围,指定范围时,表达式值须从小到大排列。例如:Case -20 To -15,15 To 20
Is关系表达式。表示测试变量应该与Is关键字之后的表达式比较,当指定范围为真,则执行该Case下面的语句块,反之转向比较其它表达式。
注意:测试变量的类型必须与Case后面表达式的类型一致。
例如现有学生的考试成绩存放在StScore工作表中,需要根据考试成绩,在其右邻单元给出优、良、中、及格、不及格五个等级。这可以方便地利用Select Case语句实现。相应的VBA宏程序如下所示:
Sub Score( )
‘给出优、良、中、及格、不及格五个等级。
‘快捷键 Ctrl+Shift+S
Select Case ActiveCell.Value
Case Is < 60
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "不及格"
Case 60 To 69.9
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "及格"
Case 70 To 79.9
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "中"
Case 80 To 89.9
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "良"
Case Else
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "优"
End Select
End Sub