If条件判断语句
VBA中的流程控制分为两种,其一是条件结构式的,即根据条件判断的结果去选择性执行相应的语句(块);另一种是循环,即循环地执行语句(块)。本节介绍第一种。
If 语句有三种形式:
- If…Then…End If
- If…Then…Else…End If
- If…Then…ElseIf…Then…End If
If…Then…End If
格式如下:
1
2
3
|
If 逻辑表达式 Then
' 如果逻辑表达式为真,则执行这里的语句或语句块
End If
|
例1,判断日期2/13/1995和现在日期的大小,如果小于现在的日期,myDate变量赋值为现在的日期。
1
2
3
4
5
|
Sub FixDate()
myDate = #2/13/1995#
If myDate < Now Then
myDate = Now
End Sub
|
如果Then后面只有一条语句的话,例如上面的myDate = Now
,那么If语句和Then后面的语句放在一行当中。格式如下:
1
2
|
If 逻辑表达式 Then '如果逻辑表达式为真,则执行这里的语句
End If
|
所以,例1可以修改成如下:
1
2
3
4
|
Sub FixDate()
myDate = #2/13/1995#
If myDate < Now Then myDate = Now
End Sub
|
例2,判断日期2/13/1995和现在日期的大小,如果小于现在的日期,myDate变量赋值为现在的日期并打印。Then后面是语句块,不能写在一行内。
1
2
3
4
5
6
|
Sub FixDate()
myDate = #2/13/1995#
If myDate < Now Then
myDate = Now
Debug.Print myDate
End Sub
|
If…Then…Else…End If
格式如下:
1
2
3
4
5
|
If 逻辑表达式 Then
' 如果逻辑表达式为真,则执行这里的语句或语句块
Else
' 否则(即逻辑表达式为假),则执行这里的语句或语句块
End If
|
例3,判断日期2/13/1995和现在日期的大小,如果小于现在的日期,myDate变量赋值为现在的日期并打印。如果大于现在的日期,则打印。
1
2
3
4
5
6
7
8
9
|
Sub FixDate()
myDate = #2/13/1995#
If myDate < Now Then
myDate = Now
Debug.Print "日期2/13/1995小于日期" & myDate
Else
Debug.Print "日期2/13/1995大于日期" & myDate
End If
End Sub
|
以上程序的运行结果如下:
1
|
日期2/13/1995小于日期2019/09/17 9:56:05
|
如果将myDate修改为比2019/09/17 9:56:05大的日期时,将执行else语句。
1
2
3
4
5
6
7
8
9
|
Sub FixDate()
myDate = #2/13/2020#
If myDate < Now Then
myDate = Now
Debug.Print "日期2/13/2020小于日期" & myDate
Else
Debug.Print "日期2/13/2020大于日期" & myDate
End If
End Sub
|
以上程序的运行结果如下:
1
|
日期2/13/2020大于日期2019/09/17 9:56:05
|
If…Then…ElseIf…Then…End If
格式如下:
1
2
3
4
5
6
7
8
|
If 逻辑表达式1 Then
' 逻辑表达式1为真,则执行这里的语句
ElseIf 逻辑表达式2 Then
' 逻辑表达式2为真,则执行这里的语句
……
Else
' 逻辑表达式1,2……,都返回了假,则执行这里的语句
End If
|
elseIf语句可以有多个。
例4,根据学生的成绩给出评价。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
Sub Test()
Dim intA As Integer
intA = 59
If intA >= 90 Then
debug.Print "优秀"
ElseIf intA >= 70 Then
debug.Print "良好"
ElseIf intA >= 60 Then
debug.Print "一般"
Else
debug.Print "差"
End If
End Sub
|
以上程序的运行结果如下:
If语句的嵌套
If语句里面还可以有If语句,形成If语句嵌套。每个嵌套的If语句必须具有匹配的End If语句。
例5,根据学生的成绩给出评价,在大于90分的判断上面又加了个If判断,形成If语句的嵌套。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
Sub Test()
Dim intA As Integer
intA = 100
If intA >= 90 Then
If intA = 100 Then
debug.Print "天才"
Else '这个else语句和If intA = 100是一对的
debug.Print "优秀"
End If
ElseIf intA >= 70 Then
debug.Print "良好"
ElseIf intA >= 60 Then
debug.Print "一般"
Else
debug.Print "差"
End If
End Sub
|
以上程序的运行结果如下:
Select Case条件判断语句
Select Case语句在功能与If语句非常相似。执行几组语句之一,具体取决于表达式的值。
有两种形式。
- 有Else的Select Case条件判断语句
- 没有Else的Select Case条件判断语句
有Else的Select Case条件判断语句
格式如下:
1
2
3
4
5
6
7
8
9
10
11
|
Select Case 测试表达式
Case 表达式1
' 如果测试表达式等于表达式1,则执行这里的语句
Case 表达式2
' 如果测试表达式等于表达式2,则执行这里的语句
Case 表达式3
' 如果测试表达式等于表达式3,则执行这里的语句
' 后面可以有更多的Case
Case else
' 前面所有的表达式都不满足时,则执行这里的语句
End Select
|
测试表达式是任何数值表达式或字符串表达式。
例6,把例4的If……elseIf……形式改成Select Case语句的形式。在“Case 表达式” 中间有个Is。这个是用于表达式判断时候用的格式,这样才能够起到类似于If……elseIf……的作用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
Sub Test()
Dim intA As Integer
intA = 59
Select Case intA
Case Is >= 90
Debug.Print "优秀"
Case Is >= 70
Debug.Print "良好"
Case Is >= 60
Debug.Print "一般"
Case Else
Debug.Print "差"
End Select
End Sub
|
以上程序的运行结果如下:
没有Else的Select Case条件判断语句
格式如下:
1
2
3
4
5
6
7
8
9
|
Select Case 测试表达式
Case 表达式1
' 如果测试表达式等于表达式1,则执行这里的语句
Case 表达式2
' 如果测试表达式等于表达式2,则执行这里的语句
Case 表达式3
' 如果测试表达式等于表达式3,则执行这里的语句
' 后面可以有更多的Case
End Select
|
例7,intA是59,没有满足条件的Case语句。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Sub Test()
Dim intA As Integer
intA = 59
Select Case intA
Case Is >= 90
Debug.Print "优秀"
Case Is >= 70
Debug.Print "良好"
Case Is >= 60
Debug.Print "一般"
End Select
End Sub
|
Case子句中使用多个表达式或范围
例8,Case语句为数字使用多个表达式和范围。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Sub Test()
Dim Number As Integer
Number = 8
Select Case Number
Case 1 To 5 ' 范围1到5
Debug.Print "Between 1 and 5"
Case 6, 7, 8 ' 多个表达式。表达式6,表达式7和表达式8
Debug.Print "Between 6 and 8"
Case 9 To 10 ' 范围9到10
Debug.Print "Greater than 8"
End Select
End Sub
|
以上程序的运行结果如下:
例9,Case语句为字符串使用多个表达式和范围。
1
2
3
4
5
6
7
8
9
10
11
|
Sub Test()
Dim letter As String
letter = "E"
Select Case letter
Case "A" To "C" ' 范围A到C
Debug.Print "Between A and C"
Case "D", "E" ' 多个表达式。表达式D和表达式E
Debug.Print "Between D and E"
End Select
End Sub
|
以上程序的运行结果如下:
Select Case语句的嵌套
Select Case语句里面还可以有Select Case语句,形成Select Case语句嵌套。每个嵌套的Select Case语句必须具有匹配的End Select语句。
例10,根据学生的成绩给出评价,在大于90分的判断上面又加了个Select Case判断,形成Select Case语句的嵌套。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
Sub Test()
Dim intA As Integer
intA = 100
Select Case intA
Case Is >= 90
Select Case intA
Case 100
Debug.Print "天才"
Case Else
Debug.Print "优秀"
End Select
Case Is >= 70
Debug.Print "良好"
Case Is >= 60
Debug.Print "一般"
Case Else
Debug.Print "差"
End Select
End Sub
|
以上程序的运行结果如下:
If语句和Select Case语句混合使用
Select Case的嵌套一般用的比较少。上面例10可以将内层的Select Case语句改成If语句,比较容易理解。
例10,根据学生的成绩给出评价,在大于90分的判断上面又加了个Select Case判断,形成Select Case语句的嵌套。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
Sub Test()
Dim intA As Integer
intA = 100
Select Case intA
Case Is >= 90
If intA = 100 Then
Debug.Print "天才"
Else
Debug.Print "优秀"
End If
Case Is >= 70
Debug.Print "良好"
Case Is >= 60
Debug.Print "一般"
Case Else
Debug.Print "差"
End Select
End Sub
|
参考资料:https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/Select-Case-statement
转载请注明本网址。