If条件判断语句

VBA中的流程控制分为两种,其一是条件结构式的,即根据条件判断的结果去选择性执行相应的语句(块);另一种是循环,即循环地执行语句(块)。本节介绍第一种。

If 语句有三种形式:

  1. If…Then…End If
  2. If…Then…Else…End If
  3. 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

以上程序的运行结果如下:

1

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

以上程序的运行结果如下:

1
天才

Select Case条件判断语句

Select Case语句在功能与If语句非常相似。执行几组语句之一,具体取决于表达式的值。 有两种形式。

  1. 有Else的Select Case条件判断语句
  2. 没有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

以上程序的运行结果如下:

1

没有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

以上程序的运行结果如下:

1
Between 6 and 8

例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

以上程序的运行结果如下:

1
Between D and E

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

以上程序的运行结果如下:

1
天才

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

转载请注明本网址。